热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python3解析html_Python3解析html

python自带了一个类,叫HTMLParser。我们用的时候需要自己定义一个类,继承自HTMLParser。然后重写一部分方法。下面是我们常用的解析h

python 自带了一个类,叫 HTMLParser。

我们用的时候需要自己定义一个类,继承自 HTMLParser 。然后重写一部分方法。

下面是我们常用的解析html的方法,可以看到在 HTMLParser 里面,这些方法内容都是空的,也就是如果我们要用某个方法,我们得自己再我们的类里面重写这个方法。具体的每个方法的使用方式参见下文。

#Overridable -- finish processing of start+end tag:

defhandle_startendtag(self, tag, attrs):

self.handle_starttag(tag, attrs)

self.handle_endtag(tag)#Overridable -- handle start tag

defhandle_starttag(self, tag, attrs):pass

#Overridable -- handle end tag

defhandle_endtag(self, tag):pass

#Overridable -- handle character reference

defhandle_charref(self, name):pass

#Overridable -- handle entity reference

defhandle_entityref(self, name):pass

#Overridable -- handle data

defhandle_data(self, data):pass

#Overridable -- handle comment

defhandle_comment(self, data):pass

#Overridable -- handle declaration

defhandle_decl(self, decl):pass

#Overridable -- handle processing instruction

defhandle_pi(self, data):pass

使用

1. 简单解析

from html.parser importHTMLParserclassMyHTMLParser(HTMLParser):defhandle_starttag(self, tag, attrs):print("Encountered a start tag:", tag)defhandle_endtag(self, tag):print("Encountered an end tag :", tag)defhandle_data(self, data):print("Encountered some data :", data)

parser=MyHTMLParser()

parser.feed('

TestParse me!')

这里写了一个类 MyHTMLParse ,继承自 HTMLParser。然后重写了 handle_xxx方法。

然后只要调用该类的 feed() 方法,将html格式的数据传进去,遇到特定的数据,就会自动触发相应的方法。比如遇到就会触发handle_starttag()方法进行处理。

执行结果如下:

Encountered a start tag: html

Encountered a start tag: head

Encountered a start tag: title

Encountered some data : Test

Encountered an end tag : title

Encountered an end tag : head

Encountered a start tag: body

Encountered a start tag: h1

Encountered some data : Parse me!

Encountered an end tag : h1

Encountered an end tag : body

Encountered an end tag : html

2. 复杂解析

from html.parser importHTMLParserfrom html.entities importname2codepointclassMyHTMLParser(HTMLParser):defhandle_starttag(self, tag, attrs):print("Start tag:", tag)for attr inattrs:print("attr:", attr)defhandle_endtag(self, tag):print("End tag :", tag)defhandle_data(self, data):print("Data :", data)defhandle_comment(self, data):print("Comment :", data)defhandle_entityref(self, name):

c=chr(name2codepoint[name])print("Named ent:", c)defhandle_charref(self, name):if name.startswith('x'):

c= chr(int(name[1:], 16))else:

c=chr(int(name))print("Num ent :", c)defhandle_decl(self, data):print("Decl :", data)

parser= MyHTMLParser()

1)解析文档类型申明

传入html数据如下:

parser.feed('')

执行结果如下,可以看到会自动调用 handle_decl() 方法。

Decl : DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"

2) 解析属性

传入html数据如下:

parser.feed('The Python logo')

执行结果如下,可以看到会自动调用 handle_starttag()方法。

Start tag: img

attr: ('src', 'python-logo.png')

attr: ('alt', 'The Python logo')

3)解析数据以及结束标签

传入html数据如下:

parser.feed('')

执行结果如下,可以看到会自动调用 handle_data() 以及 handle_endtag()方法。

Start tag: style

attr: ('type', 'text/css')

Data :#python { color: green }

End tag : style

4)解析备注

传入html数据如下:

parser.feed('')

执行结果如下,可以看到会自动调用 handle_comment()方法。

Comment : a comment

Comment : [if IE 9]>IE-specific content

5)解析实体字符

传入html数据如下:

parser.feed('>>>')

在html语言中 ‘>’这个符号,实体名称为 > , 实体编号为 >。这里 >表示16进制数字,3E转化过来和62 是一致的。

执行结果如下,可以看到会自动调用 handle_entityref() 来处理 > ,然后调用 handle_charref()来处理 > 以及 >。

Named ent: >Num ent :>Num ent :>



推荐阅读
  • andr ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 图数据库中的知识表示与推理机制
    本文探讨了图数据库及其技术生态系统在知识表示和推理问题上的应用。通过理解图数据结构,尤其是属性图的特性,可以为复杂的数据关系提供高效且优雅的解决方案。我们将详细介绍属性图的基本概念、对象建模、概念建模以及自动推理的过程,并结合实际代码示例进行说明。 ... [详细]
  • VPX611是北京青翼科技推出的一款采用6U VPX架构的高性能数据存储板。该板卡搭载两片Xilinx Kintex-7系列FPGA作为主控单元,内置RAID控制器,支持多达8个mSATA盘,最大存储容量可达8TB,持续写入带宽高达3.2GB/s。 ... [详细]
  • 本题涉及一棵由N个节点组成的树(共有N-1条边),初始时所有节点均为白色。题目要求处理两种操作:一是改变某个节点的颜色(从白变黑或从黑变白);二是查询从根节点到指定节点路径上的第一个黑色节点,若无则输出-1。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 本文介绍了如何使用 Python 的 Bokeh 库在图表上绘制菱形标记。Bokeh 是一个强大的交互式数据可视化工具,支持丰富的图形自定义选项。 ... [详细]
author-avatar
一个不起眼的小人物
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有