网易首页 > 网易号 > 正文 申请入驻

Python 库手册:html.parser HTML 解析模块

0
分享至

html.parser 是 Python 标准库中用于解析 HTML 文件的模块,提供了一个基础类 HTMLParser,通过继承并重写其方法,可以提取网页中的标签、属性与文本内容。它是纯 Python 实现的轻量级 HTML 解析工具,无需第三方依赖,可用于简单的网页内容提取任务。

常见应用场景:

(1)提取 HTML 中的文本、超链接、图片等信息。

(2)编写简单的网页内容抓取器(抓取不依赖 JavaScript 渲染的网页)。

(3)快速分析本地 HTML 文件结构。

(4)替代复杂的 HTML DOM 操作。

◆ ◆

核心概念

1、HTMLParser 是 HTML 解析的核心类。

这是一个基于事件驱动(event-driven)的类,它会在遇到 HTML 标签时触发对应的处理方法(如 handle_starttag()、handle_data() 等),你需要通过继承它并重写这些方法来自定义行为。

2、解析流程是“逐标签解析”的。

解析器会按顺序扫描 HTML 文本:遇到开始标签时调用 handle_starttag()。遇到结束标签时调用 handle_endtag()。遇到数据内容(文本节点)时调用 handle_data()。遇到注释时调用 handle_comment(),等等。

3、HTML 标签的属性以 (name, value) 元组形式提供

在 handle_starttag() 中,标签属性通过第二个参数 attrs 提供,这是一个 [(属性名, 属性值)] 的列表,例如:

[('href', 'https://example.com'), ('target', '_blank')]

◆ ◆

应用举例

例 1:提取所有链接

from html.parser import HTMLParser

class LinkParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        if tag == 'a':
            for name, value in attrs:
                if name == 'href':
                    print("链接地址:", value)

html_doc = '''

欢迎访问

'''

parser = LinkParser()
parser.feed(html_doc)

例 2:提取所有文本内容

from html.parser import HTMLParser

class TextExtractor(HTMLParser):
    def handle_data(self, data):
        print("文本内容:", data.strip())

html = ' 标题 这是一段文字。'
parser = TextExtractor()
parser.feed(html)

例 3:打印 HTML 中的所有标签及属性

from html.parser import HTMLParser

class TagPrinter(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print(f"标签:<{tag}>")
        for attr in attrs:
            print(f"  属性:{attr[0]} = {attr[1]}")

parser = TagPrinter()
parser.feed('')

例 4:处理 HTML 注释

from html.parser import HTMLParser

class CommentParser(HTMLParser):
    def handle_comment(self, data):
        print("注释内容:", data.strip())

parser = CommentParser()
parser.feed(' ')

例 5:提取网页标题 的内容

from html.parser import HTMLParser
from urllib.request import urlopen 

class TitleParser(HTMLParser):
    def __init__(self):
        super().__init__()
        self.in_title = False
        self.title = ""

    def handle_starttag(self, tag, attrs):
        if tag.lower() == 'title':
            self.in_title = True

    def handle_data(self, data):
        if self.in_title:
            self.title += data.strip()

    def handle_endtag(self, tag):
        if tag.lower() == 'title':
            self.in_title = False

# 打开网页并读取 HTML
url = "https://www.example.com"
with urlopen(url) as response:
    html = response.read().decode("utf-8")

# 提取标题
parser = TitleParser()
parser.feed(html)
print("网页标题:", parser.title)

◆ ◆

常用函数速览

HTMLParser.feed(data)

向解析器传入 HTML 字符串,触发各类回调方法。

参数

data:字符串类型的 HTML 内容

返回:无

将 HTML 文本输入解析器的 .feed() 方法后,解析才会开始。可反复调用 .feed() 追加数据。

HTMLParser.close()

结束 HTML 解析,确保所有缓存数据被处理。

在某些流式解析场景中,.close() 可用于标记输入结束并清理状态,但通常 .feed() 足以完成解析。

HTMLParser.reset()

重置解析器到初始状态(不常用)。

◆ ◆

补充说明

1、html.parser 不执行 JavaScript,因此适用于静态 HTML 内容。

2、解析 HTML 时不构建 DOM 树,而是使用事件回调(类似 SAX)。

与 xml.etree 不同,HTMLParser 不会创建节点树。你必须在回调中自行提取、处理或存储内容,适合快速提取结构简单或特定模式的 HTML 内容。

3、不能处理格式错误严重的 HTML。可使用第三方库 BeautifulSoup。

4、若使用非 UTF-8 编码的 HTML 内容,需先用正确的编码解码成字符串。

点赞有美意,赞赏是鼓励

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
忍无可忍!广东队外援发文炮轰CBA裁判,炮轰CBA

忍无可忍!广东队外援发文炮轰CBA裁判,炮轰CBA

体育哲人
2026-01-07 14:06:23
知名大学两院院士被指涉及性不端行为,遭校方解雇

知名大学两院院士被指涉及性不端行为,遭校方解雇

超级数学建模
2026-01-06 22:38:55
充电5分钟,循环10万次!芬兰小厂推出全球首款量产固态电池

充电5分钟,循环10万次!芬兰小厂推出全球首款量产固态电池

徐德文科学频道
2026-01-07 20:54:22
WTT冠军赛:女单世界亚军一轮游!0:3不敌日本张本美和,无缘晋级

WTT冠军赛:女单世界亚军一轮游!0:3不敌日本张本美和,无缘晋级

国乒二三事
2026-01-07 19:20:48
广东5分险胜深圳引热议!徐杰关键抛投杀死比赛引媒体人狂赞

广东5分险胜深圳引热议!徐杰关键抛投杀死比赛引媒体人狂赞

狼叔评论
2026-01-07 22:30:11
“哥都礼共和国”宣布成立,并宣布脱离缅甸独立

“哥都礼共和国”宣布成立,并宣布脱离缅甸独立

曼谷陈大叔
2026-01-07 15:57:35
别被误导!美军突破委内瑞拉防空网,原来真不是中国雷达的问题

别被误导!美军突破委内瑞拉防空网,原来真不是中国雷达的问题

兵国大事
2026-01-08 00:05:06
赖清德准备抓人,郑丽文也有危险?大陆出手,对台独打手终身追责

赖清德准备抓人,郑丽文也有危险?大陆出手,对台独打手终身追责

触摸史迹
2026-01-07 13:55:48
倒计时30天!央视发布冬奥观赛指南,谷爱凌除夕夜大跳台冲金

倒计时30天!央视发布冬奥观赛指南,谷爱凌除夕夜大跳台冲金

全景体育V
2026-01-07 10:39:24
准备收网?泽连斯基振臂一呼,在华注册公司被制裁,中方有言在先

准备收网?泽连斯基振臂一呼,在华注册公司被制裁,中方有言在先

博览历史
2026-01-08 00:20:03
看懂史上真实的慈安,才明白慈禧为何绞尽脑汁,一辈子都斗不过她

看懂史上真实的慈安,才明白慈禧为何绞尽脑汁,一辈子都斗不过她

近史谈
2026-01-06 16:28:59
35岁郑爽近照曝光!脸部又僵又肿,彻底沦为素人,孩子身影曝光

35岁郑爽近照曝光!脸部又僵又肿,彻底沦为素人,孩子身影曝光

叶公子
2026-01-07 20:11:46
小米,这次不是别人黑你们了吧!

小米,这次不是别人黑你们了吧!

亮见
2026-01-07 14:48:20
方便面巨头凉了!从年销20亿到无人买,因老板野心大,3年干倒闭

方便面巨头凉了!从年销20亿到无人买,因老板野心大,3年干倒闭

以茶带书
2025-12-05 17:10:50
大陆博主曝光“台独”顽固分子沈伯洋住处和工作场所,国台办回应

大陆博主曝光“台独”顽固分子沈伯洋住处和工作场所,国台办回应

界面新闻
2026-01-07 10:59:20
别墅搜出23件国宝,全家集体失联!徐湖平案落幕,17年举报有结果

别墅搜出23件国宝,全家集体失联!徐湖平案落幕,17年举报有结果

诗意世界
2026-01-03 15:19:25
马杜罗还有救,联合国召开大会,6国出面救人,朝鲜下令发射导弹

马杜罗还有救,联合国召开大会,6国出面救人,朝鲜下令发射导弹

军机Talk
2026-01-06 10:23:09
27岁女生黄山坠亡最新!遇难细节蹊跷,银行卡被清空,家属曝猛料

27岁女生黄山坠亡最新!遇难细节蹊跷,银行卡被清空,家属曝猛料

游者走天下
2026-01-06 15:44:51
普通车厢站不直,商务车厢能打盹?深圳地铁11号线车厢设置引热议,地铁回应:没有取消计划

普通车厢站不直,商务车厢能打盹?深圳地铁11号线车厢设置引热议,地铁回应:没有取消计划

大风新闻
2026-01-07 21:36:03
午后突变!贵金属,全线跳水!

午后突变!贵金属,全线跳水!

证券时报
2026-01-07 14:55:07
2026-01-08 01:00:49
MediaTea
MediaTea
专业的数字媒体、新媒体技术
1692文章数 72关注度
往期回顾 全部

科技要闻

精华!黄仁勋CES记者会:揭秘新款大杀器

头条要闻

委向美移交5000万桶原油有部分原本销往中国 中方回应

头条要闻

委向美移交5000万桶原油有部分原本销往中国 中方回应

体育要闻

卖水果、搬砖的小伙,与哈兰德争英超金靴

娱乐要闻

《马背摇篮》首播,革命的乐观主义故事

财经要闻

农大教授科普:无需过度担忧蔬菜农残

汽车要闻

燃油驾趣+智能电感双Buff 试驾全新奥迪Q5L

态度原创

房产
本地
家居
游戏
公开课

房产要闻

最新!海口二手房,涨价房源突然猛增30%

本地新闻

“闽东利剑·惠民安商”高效执行专项行动

家居要闻

宁静不单调 恰到好处的美

网友惊呆了!《美末2》艾莉孩子竟是美女动捕制作的

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版