Python HTML模块详解:从基础到实战

一、模块体系全景图

Python生态中处理HTML的工具可分为三大层级:

  1. 标准库基础层:html模块 + html.parser
  2. 第三方增强层:BeautifulSoup(搭配解析器)
  3. 专业级工具层:lxml + requests-html

二、标准库核心模块详解

1. html模块:HTML安全卫士

核心功能三板斧

# 实体编码(防XSS攻击)
user_input = "<script>alert('黑客攻击')</script>"
safe_content = html.escape(user_input)  # 转义为&lt;script&gt;...# 属性转义(安全生成HTML)
class HTMLGenerator:@staticmethoddef create_tag(tag, content, **attrs):safe_attrs = {k: html.escape(str(v)) for k,v in attrs.items()}return f"<{tag} {attrs}>{html.escape(content)}</{tag}>"# 实体解码(处理爬取数据)
raw_data = "&lt;div&gt;测试内容&lt;/div&gt;"
decoded_data = html.unescape(raw_data)  # 还原为<div>测试内容</div>

2. html.parser:轻量级解析器

事件驱动解析模型

from html.parser import HTMLParserclass LinkExtractor(HTMLParser):def __init__(self):super().__init__()self.links = []def handle_starttag(self, tag, attrs):if tag == 'a':for attr in attrs:if attr[0] == 'href':self.links.append(attr[1])# 使用示例
parser = LinkExtractor()
parser.feed('<a href="/home">首页</a><a href="/about">关于</a>')
print(parser.links)  # 输出:['/home', '/about']

三、第三方库对比与选型指南

工具适用场景性能安装依赖
html.parser简单静态页面解析无需安装
BeautifulSoup复杂HTML结构提取★★★pip install bs4
lxml大规模数据处理★★★★pip install lxml
requests-html动态页面渲染(含JS执行)★★★pip install requests-html

动态页面处理方案对比

# requests-html方案(推荐)
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://dynamic.site')
r.html.render()  # 自动执行JS# Selenium方案(复杂场景)
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://complex.site')
driver.find_element(By.ID, 'content').text

四、实战案例:豆瓣电影数据抓取

标准库实现方案

from html.parser import HTMLParser
import urllib.requestclass DoubanParser(HTMLParser):def __init__(self):super().__init__()self.movies = []self.in_title = Falsedef handle_starttag(self, tag, attrs):if tag == 'div' and ('class', 'info') in attrs:self.in_title = Truedef handle_data(self, data):if self.in_title:self.movies.append(data.strip())self.in_title = False# 执行抓取
url = 'https://movie.douban.com/top250'
with urllib.request.urlopen(url) as response:html = response.read().decode('utf-8')parser = DoubanParser()
parser.feed(html)
print(f"获取到{len(parser.movies)}部电影")

BeautifulSoup优化版

from bs4 import BeautifulSoup
import requestsdef scrape_douban():soup = BeautifulSoup(requests.get(url).text, 'lxml')movies = [{'title': item.find('span', class_='title').text,'rating': item.find('span', class_='rating_num').text}for item in soup.find_all('div', class_='item')]return movies

五、性能优化与安全实践

1. 编码规范建议

# 统一转义策略
def safe_html(content):return html.escape(content, quote=True)  # 转义所有特殊字符# 属性值处理(防注入)
def safe_attr(value):return html.escape(str(value), quote=False)  # 不转义引号

2. 异常处理机制

try:parser.feed(html_content)
except HTMLParseError as e:logging.error(f"HTML解析失败: {str(e)}")# 降级处理方案fallback_parser = HTMLParser()fallback_parser.feed(html_content)

3. 动态内容处理流程

发起请求
是否动态页面?
执行JS渲染
直接解析
提取DOM结构
数据清洗

六、版本更新与兼容性

  • Python 3.12+:html.parser性能提升30%
  • BeautifulSoup 4.12:新增CSS选择器支持
  • lxml 4.9.3:修复XPath内存泄漏问题

七、学习资源推荐

  1. 官方文档
  2. 动态网页抓取实战
  3. 反爬虫对抗指南

通过本文的系统学习,您将掌握从基础HTML处理到复杂动态页面解析的完整技能链。实际开发中建议根据具体场景选择工具,并严格遵守目标网站的robots.txt协议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90967.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch常用Tensor形状变换函数详解

PyTorch常用Tensor形状变换函数详解 在PyTorch中&#xff0c;对张量&#xff08;Tensor&#xff09;进行形状变换是深度学习模型构建中不可或缺的一环。无论是为了匹配网络层的输入要求&#xff0c;还是为了进行数据预处理和维度调整&#xff0c;都需要灵活运用各种形状变换函数…

自主智能Agent如何重塑工作流自动化:技术、经济与未来展望

自主智能Agent的崛起与工作流自动化的范式革命2025年7月&#xff0c;当OpenAI向付费用户推出具备网页浏览和代码执行能力的ChatGPT Agent时&#xff0c;工作流自动化领域迎来了一场静默但彻底的革命。这款不再满足于简单问答的智能体&#xff0c;在一个安全的虚拟计算机环境中运…

技术架构、行业应用、工具链整合、挑战应对及未来趋势五大模块,引用多个权威来源数据与开源项目实现细节。

以下是一份关于AI技术落地的实战经验总结报告&#xff0c;结合代码示例、可视化图表与行业案例&#xff0c;内容分为技术架构、行业应用、工具链整合、挑战应对及未来趋势五大模块&#xff0c;引用多个权威来源数据与开源项目实现细节。AI技术落地实战指南&#xff1a;从架构设…

第 9 篇:神经网络初探——当AI拥有了“大脑”,世界从此不同

《人工智能AI之机器学习基石》系列⑨ 专栏核心理念: 用通俗语言讲清楚机器学习的核心原理,强调“洞察 + 技术理解 + 应用连接”,构建一个完整的、富有启发性的知识体系。

音频焦点 Android Audio Focus 进阶

旧焦点处理 示例调用链: requestAudioFocus() → propagateFocusLossFromGain_syncAf() → handleFocusLossFromGain()。 系统事件(如来电)→ 强制焦点变化 → handleFocusLossFromGain()。 函数 propagateFocusLossFromGain_syncAf 焦点持有者发生的焦点丢失通知 主要功能…

MFC UI对话框

文章目录对话框模态对话框创建销毁关闭CDialog::OnCancel()EndDialog()CDialog::DestroyWindow()非模态对话框创建销毁关闭delete this对话框 模态对话框 ​​阻塞父窗口​​&#xff0c;强制用户先处理对话框。关闭前父窗口无法响应事件。 创建 推荐&#xff1a;非指针方式…

RabbitMQ--@RabbitListener及@RabbitHandle

两者区别 在 Spring AMQP 中&#xff0c;RabbitListener 和 RabbitHandler 是处理 RabbitMQ 消息的核心注解&#xff0c;但职责和使用场景完全不同。以下从 定义、区别、场景、示例 逐层解析&#xff1a;一、核心定义1. RabbitListener作用&#xff1a;标记 方法或类 为 Ra…

【基于CKF的IMM】MATLAB例程,CV和CT两个模型下的IMM,二维,滤波使用CKF(容积卡尔曼滤波),附下载链接

本程序实现了基于交互多模型&#xff08;IMM&#xff09;容积卡尔曼滤波&#xff08;CKF&#xff09;的多模型融合定位方法&#xff0c;并与纯CV−CKFCV-CKFCV−CKF&#xff08;匀速模型&#xff09;和CT−CKFCT-CKFCT−CKF&#xff08;匀角速度转弯模型&#xff09;方法对比。…

AI资讯日报 - 2025年07月28日

AI资讯日报 | 2025年07月28日 周一 今日核心要点 精华提炼 技术突破 • 腾讯混元&#xff1a;开源发布、3D技术 • 书生Intern&#xff1a;开源发布、多模态 企业动态 • AI工具集&#xff1a;协同创作、视频生成 数据概览分类数量重点关注技术突破2 条开源发布、3D技术企业动态…

大语言模型 LLM 通过 Excel 知识库 增强日志分析,根因分析能力的技术方案(1):总体介绍

文章大纲 1. 核心目标 2. 系统总体架构 3. Google Cloud 端到端方案(含无 RAG & RAG 双模式) 3.1 无 RAG:Function-Calling 查表模式 3.2 RAG:托管式向量检索 4. 开源轻量级方案 5. 数字孪生联合验证(实验性) 6. 知识图谱增强(Neo4j) 7. 监控与持续优化(CometLLM)…

Deepseek + browser-use 轻松实现浏览器自动化

在数字化时代&#xff0c;浏览器应用广泛&#xff0c;浏览器自动化可大幅提升效率。Deepseek 是强大的智能语言模型&#xff0c;能精准解析复杂指令&#xff0c;browser - use 是专注浏览器操作的工具&#xff0c;提供丰富 API 接口&#xff0c;支持主流浏览器的各类自动化操作…

开疆智能ModbusTCP转Profient网关连接西门子PLC与川崎机器人配置案例

本案例是西门子PLC与川崎机器人通过Profient转ModbusTCP网关进行通讯转换的配置案例&#xff0c;西门子作为profinet主站&#xff0c;机器人作为ModbusTCP服务器。配置过程&#xff1a;机器人配置川崎机器人控制器提供了RS232、以太网的通信接口&#xff0c;同时也可通过加装选…

Docker多主机网络连接:实现跨主机通信

Docker 是一种流行的容器化平台&#xff0c;它可以帮助开发人员更方便地构建、发布和管理应用程序。在 Docker 中&#xff0c;容器是独立运行的应用程序包装&#xff0c;包含了运行所需的所有文件、库和环境变量。Docker 提供了多种网络连接方式&#xff0c;使得容器之间可以进…

OSPF笔记

一、OSPF基础1、技术背景&#xff08;RIP中存在的问题&#xff09;RIP中存在最大跳数为15的限制&#xff0c;不能适应大规模组网周期性发送全部路由信息&#xff0c;占用大量的带宽资源路由收敛速度慢以跳数作为度量值存在路由环路可能性每隔30秒更新2、OSPF协议特点没有跳数限…

kotlin基础【3】

Kotlin Playground: Edit, Run, Share Kotlin Code Online 资料&#xff1a;kotlin实战 第一章 data class Person(val name: String,val age:Int?null)//允许接受以age为空&#xff0c;当为空将它赋值为null,如果不这么写直接写age:Int?是否可以fun main(args:Array<St…

Java-数构二叉树

1.树 1.1概念 树是一种非线性的数据结构&#xff0c;它是由n个有限节点组成一个具有层次关系。这种结构有以下特点&#xff1a; 一个特殊的结点&#xff0c;称为根节点&#xff0c;根节点没有前驱节点除根节点以外&#xff0c;其余节点分成M个互不相交的集合。每个集合又是一…

编程中水合的理解

在编程中&#xff0c;水合&#xff08;Hydration&#xff09; 是一个常见概念&#xff0c;尤其在 前端开发 和 服务端渲染&#xff08;SSR&#xff09; 场景中频繁出现。它的核心含义是&#xff1a;将静态内容“激活”为交互式动态内容。1. 水合的本质简单理解&#xff1a;水合…

使用ffmpeg转码h265后mac默认播放器不支持问题

由于mac自带录屏是mov并且文件特别大&#xff0c;我使用ffmpeg转码视频为h265使用如下命令ffmpeg_command [ffmpeg_path,"-i", input_path,"-c:v", "libx265","-preset", "veryslow","-map_metadata", "0&q…

支持MySQL、PostgreSQL和Redis集群部署,1Panel开源面板v2.0.5版本发布

2025年7月24日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v2.0.5版本。在这一版本中&#xff0c;1Panel新增数据库集群部署、邮件告警和主从节点灵活切换三项功能&#xff0c;聚焦为企业级运维场景提供更优使用体验。 1Panel v2.0.5版本是1Panel开源面板…

GaussDB 数据库架构师修炼(九) 逻辑备份实操

1 逻辑备份定义 逻辑备份是指与业务有关的对象进行备份&#xff0c;这个对象包括表、表的数据、视图、索引、过程、函数等等。GaussDB支持逻辑备份的工具为gs_dump、gs_restore&#xff0c;以下举例说明。 2 创建举例数据 以下创建testdb库&#xff0c;创建test1模式&#xf…