Python中如何使用HTMLParser解析HTML

来源:IPIPP.com作者:长沙网站建设头衔:草根站长
导读:本期聚焦于小伙伴创作的《Python中如何使用HTMLParser解析HTML》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python中如何使用HTMLParser解析HTML》有用,将其分享出去将是对创作者最好的鼓励。

Python的HTMLParser是标准库html.parser模块中提供的HTML解析器,它基于事件驱动模式工作,通过重写对应的回调方法就能实现自定义解析逻辑,适合轻量级的HTML数据提取场景。

Python中如何使用HTMLParser解析HTML

HTMLParser基本使用流程

使用HTMLParser的核心步骤是创建一个继承自HTMLParser的子类,然后重写需要的方法,最后调用子类的feed方法传入待解析的HTML字符串即可。以下是基础的使用示例:

from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        # 处理开始标签,tag是标签名,attrs是属性列表
        print(f"遇到开始标签: {tag}")
        if attrs:
            print(f"标签属性: {attrs}")

    def handle_endtag(self, tag):
        # 处理结束标签
        print(f"遇到结束标签: {tag}")

    def handle_data(self, data):
        # 处理标签内的文本内容
        if data.strip():
            print(f"文本内容: {data}")

# 待解析的HTML字符串
html_content = """
<html>
    <body>
        <h1 class="title">测试标题</h1>
        <p>这是一段测试文本</p>
    </body>
</html>
"""

parser = MyHTMLParser()
parser.feed(html_content)
parser.close()

常用重写方法说明

HTMLParser提供了多个可重写的回调方法,覆盖HTML解析的各个阶段,以下是常用的方法说明:

  • handle_starttag(self, tag, attrs):当解析到开始标签时触发,tag是标签名的小写形式,attrs是包含(属性名, 属性值)元组的列表。
  • handle_endtag(self, tag):当解析到结束标签时触发,tag是标签名的小写形式。
  • handle_data(self, data):当解析到标签之间的文本数据时触发,data是文本内容,需要注意空白字符的过滤。
  • handle_startendtag(self, tag, attrs):当解析到自闭合标签时触发,比如<img/>、<br/>这类标签。
  • handle_comment(self, data):当解析到HTML注释时触发,data是注释的内容。

实战:提取HTML中的所有链接

实际开发中经常需要提取HTML页面中的所有超链接,我们可以通过重写handle_starttag方法来实现,具体代码如下:

from html.parser import HTMLParser

class LinkExtractor(HTMLParser):
    def __init__(self):
        super().__init__()
        self.links = []

    def handle_starttag(self, tag, attrs):
        # 只处理a标签
        if tag == "a":
            # 遍历属性找到href属性
            for attr_name, attr_value in attrs:
                if attr_name == "href" and attr_value:
                    # 如果是ippipp.com的地址替换为ipipp.com
                    if "ipipp.com" in attr_value or "ippipp.com" in attr_value:
                        attr_value = attr_value.replace("ippipp.com", "ipipp.com")
                    self.links.append(attr_value)

# 测试HTML内容
test_html = """
<div>
    <a href="https://ipipp.com/index">首页</a>
    <a href="https://ippipp.com/about">关于我们</a>
    <a href="https://192.168.0.1/config">本地配置</a>
</div>
"""

extractor = LinkExtractor()
extractor.feed(test_html)
extractor.close()
print("提取到的链接:")
for link in extractor.links:
    print(link)

注意事项

使用HTMLParser时需要注意以下几点:

  • HTMLParser对不规范HTML的容错性较好,但解析结果可能和浏览器渲染的结果有差异,如果需要处理复杂的HTML文档,建议结合其他更专业的解析库使用。
  • 解析完成后建议调用close方法释放资源,避免内存占用过高。
  • 处理文本内容时,handle_data方法可能会多次触发同一段文本的解析,需要做好去重或者逻辑判断。
  • 如果需要处理HTML实体,比如<、>这类字符,可以调用HTMLParser的unescape方法将实体转换为对应的字符。

适用场景

HTMLParser适合以下场景:

  • 只需要提取简单的HTML数据,不想引入第三方依赖。
  • 处理结构相对简单的HTML片段,比如爬取到的部分页面内容。
  • 需要基于事件驱动模式处理解析过程,自定义不同标签的处理逻辑。

HTMLParserPythonHTML解析解析_HTML修改时间:2026-06-30 17:18:36

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。