flask 》》内置HTMLParser

csharp 复制代码
from html.parser import HTMLParser

class LinkExtractor(HTMLParser):
    """一个自定义的HTML解析器,用于提取所有链接"""
    def __init__(self):
        # 初始化父类,convert_charrefs=True 是默认且推荐的设置
        super().__init__(convert_charrefs=True)
        self.links = []  # 用于存储提取到的链接

    def handle_starttag(self, tag, attrs):
        """重写开始标签处理方法"""
        # 我们只关心 <a> 标签
        if tag == 'a':
            # attrs 是一个包含 (属性名, 属性值) 元组的列表
            for attr_name, attr_value in attrs:
                if attr_name == 'href':
                    # 找到 href 属性,将其添加到列表中
                    self.links.append(attr_value)
                    print(f"找到一个链接: {attr_value}")

    def handle_data(self, data):
        """重写文本处理方法,这里仅仅是演示,可以对文本做进一步处理"""
        # 对于提取链接这个任务,我们实际上不需要处理文本
        pass

# 1. 准备一段待解析的HTML代码片段
sample_html = """
<div class="container">
    <h1>我的收藏夹</h1>
    <p>欢迎来到我的<a href="https://example.com">示例网站</a>。</p>
    <ul>
        <li><a href="https://python.org">Python官网</a></li>
        <li><a href="/about">关于我们</a></li>
        <li><a>这是一个无效的链接,没有href属性</a></li>
    </ul>
    <img src="logo.png" alt="Logo">
</div>
"""

# 2. 创建解析器实例
parser = LinkExtractor()

# 3. 将HTML数据喂给解析器
# 注意 feed 方法可以分多次调用,对于流式数据非常有用
parser.feed(sample_html)

# 4. 解析完成后,可以获取结果
print("\n所有提取到的链接:")
for link in parser.links:
    print(link)

################   结   果  ##########################
找到一个链接: https://example.com
找到一个链接: https://python.org
找到一个链接: /about

所有提取到的链接:
https://example.com
https://python.org
/about
相关推荐
高级程序源4 小时前
django校园寻物通失物招领平台32261-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·django·flask·课程设计
WeiXin_DZbishe4 小时前
基于springboot宠物领养系统-计算机毕设 附源码【课程设计】94217
vue.js·spring boot·python·django·php·课程设计
kimnoic4 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
snhna4 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
架构技术专栏4 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
码事漫谈5 小时前
你让AI干的活,它可能只干了十分之一——而你根本看不出来
后端
必须得开心呀5 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
Wx-bishekaifayuan5 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
青少儿编程课堂6 小时前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
计算机编程指导师6 小时前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通