Python HTMLParser 解析网页实例详解
本文详解如何使用 Python 内置的 HTMLParser 模块解析网页 HTML 内容。通过继承 HTMLParser 类并重写 handle_starttag、handle_endtag 和 handle_data 方法,可以精准提取特定标签(如 title)的属性值及文本内容。文章提供了完整的代码示例,展示了从解析器初始化到数据提取的全过程,帮助开发者掌握这种基础的 HTML 解析方式。
Python 网页解析 HTMLParser 的实例详解
在使用 Python 抓取网页后,通常需要对获取的 HTML 内容进行解析以提取目标信息。Python 标准库提供了 HTMLParser 类作为解析模块,虽然其语法不如 XPath 简洁,但它是 Python 中最基础的 HTML 解析方式。对于简单的提取任务,直接继承该类并重写内部方法即可满足需求。
HTMLParser 解析原理
要实现自定义的 HTML 解析逻辑,核心在于继承 html.parser.HTMLParser 类,并重写以下三个关键方法:
handle_starttag(tag, attrs):当解析器遇到开始标签时触发。可以通过检查tag名称和attrs属性列表来识别目标标签及其属性。handle_endtag(tag):当解析器遇到结束标签时触发。用于标记当前标签解析的结束。handle_data(data):当解析器遇到标签内的文本数据时触发。用于提取具体的内容。
通过在这些方法中设置状态标志(如布尔变量),可以精确控制何时提取特定标签的属性值或文本内容。
代码实现示例
以下示例演示如何提取 <title> 标签的属性值(如 id 和 mouse)及其内部文本。假设待解析的 HTML 结构如下:
<html> <title id='main' mouse='你好'>我是标题</title><body>我是内容</body> </html>
对应的 Python 解析代码如下:
import html.parser as h
class MyHTMLParser(h.HTMLParser):
a_t=False
def handle_starttag(self, tag, attrs):
#print("开始一个标签:",tag)
print()
if str(tag).startswith("title"):
print(tag)
self.a_t=True
for attr in attrs:
print(" 属性值:",attr)
def handle_endtag(self, tag):
if tag == "title":
self.a_t=False
#print("结束一个标签:",tag)
def handle_data(self, data):
if self.a_t is True:
print("得到的数据: ",data)
p=MyHTMLParser()
p.feed("<html> <title id='main' mouse='你好'>我是标题</title><body>我是内容</body> </html>")
p.close()运行结果
执行上述代码后,控制台将输出解析到的标签名、属性列表以及标签内的文本数据:
title
属性值: ('id', 'main')
属性值: ('mouse', '你好')
得到的数据: 我是标题
通过这种方式,开发者可以灵活地处理各种 HTML 结构。需要注意的是,虽然 HTMLParser 简单易用,但对于复杂的网页解析任务,建议使用支持 XPath 的组件(如 Scrapy),其语法更为简洁清爽。
以上就是 Python 网页解析 HTMLParser 的实例详解的详细内容,更多关于 Python 网页解析 HTML 的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













