当前位置: 首页 > news >正文

学习lxml库:Python XML/HTML处理利器

lxml是Python中一个功能强大且高效的库,用于处理XML和HTML文档。它结合了libxml2和libxslt库的速度优势,并提供了Pythonic的API接口。下面我将为你介绍lxml库的主要功能和常用函数。

安装lxml

在开始之前,请确保已安装lxml库:

pip install lxml

主要功能模块

lxml主要包含以下几个模块:

  • etree:用于XML处理的核心模块

  • html:专门用于HTML处理的模块

  • cssselect:支持CSS选择器

常用函数和用法

1. 解析XML/HTML

从字符串解析
from lxml import etreexml_string = "<root><child>Text</child></root>"
root = etree.fromstring(xml_string)  # 解析XML字符串
从文件解析
tree = etree.parse("example.xml")  # 解析XML文件
root = tree.getroot()  # 获取根元素
解析HTML
from lxml import htmlhtml_string = "<html><body><p>Hello</p></body></html>"
doc = html.fromstring(html_string)  # 解析HTML字符串

2. 元素操作

创建元素
root = etree.Element("root")  # 创建根元素
child = etree.SubElement(root, "child")  # 创建子元素
child.text = "Text content"  # 设置元素文本
访问元素
# 获取第一个匹配的子元素
first_child = root.find("child")# 获取所有匹配的子元素
all_children = root.findall("child")# 获取元素属性
attr_value = root.get("attribute_name")
修改元素
# 设置/修改属性
root.set("attribute_name", "value")# 添加子元素
new_child = etree.Element("new_child")
root.append(new_child)

3. XPath查询

lxml支持强大的XPath查询:

# 查找所有child元素
elements = root.xpath("//child")# 查找带有特定属性的元素
elements = root.xpath("//child[@attribute='value']")# 获取元素的文本
texts = root.xpath("//child/text()")

4. CSS选择器

使用cssselect模块可以通过CSS选择器查找元素:

from lxml.cssselect import CSSSelectorsel = CSSSelector('div.content > p')  # 创建选择器
matches = sel(root)  # 应用选择器

5. 序列化输出

# 将元素树转换为字符串
xml_string = etree.tostring(root, pretty_print=True)# 写入文件
tree.write("output.xml", encoding="utf-8", pretty_print=True)

实际示例

示例1:解析和修改XML

from lxml import etree# 创建XML
root = etree.Element("catalog")
for i in range(1, 4):book = etree.SubElement(root, "book", id=str(i))title = etree.SubElement(book, "title")title.text = f"Book {i}"# 修改第二个book
second_book = root.find(".//book[@id='2']")
second_book.find("title").text = "Modified Book 2"# 添加属性
second_book.set("category", "fiction")# 输出结果
print(etree.tostring(root, pretty_print=True, encoding="unicode"))

示例2:解析HTML并提取数据

from lxml import html# 假设这是从网页获取的HTML
html_content = """
<html><body><div class="products"><div class="product"><h3>Product 1</h3><span class="price">$10.99</span></div><div class="product"><h3>Product 2</h3><span class="price">$15.99</span></div></div></body>
</html>
"""# 解析HTML
doc = html.fromstring(html_content)# 提取所有产品信息
products = []
for product in doc.cssselect("div.product"):name = product.cssselect("h3")[0].text_content()price = product.cssselect("span.price")[0].text_content()products.append({"name": name, "price": price})print(products)

性能提示

lxml以其高性能著称,但在处理大型文档时,以下几点可以帮助优化:

  1. 使用增量解析处理大文件

  2. 复用XPath表达式

  3. 避免不必要的序列化/反序列化

总结

lxml是Python中处理XML/HTML文档的强大工具,提供了:

  • 快速的解析能力

  • 丰富的元素操作方法

  • 强大的XPath和CSS选择器支持

  • 灵活的序列化选项

http://www.lryc.cn/news/602806.html

相关文章:

  • 微型化IMU如何突破无人机与机器人的性能边界?
  • Vue 工程化
  • Facenet(MTCNN+InceptionResnetV1)人脸考勤项目(有缺点,但可用)
  • 前端实现PDF在线预览的8种技术方案对比与实战
  • 【kafka】消息队列
  • 专题:2025医药生物行业趋势与投融资研究报告|附90+份报告PDF、原数据表汇总下载
  • 4、如何生成分布式ID?
  • C++入门自学Day2-- c++类与对象(初识2)
  • Deepseek + browser-use 轻松实现浏览器自动化
  • “本地计算机上的 mysql 服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止”解决方式
  • Linux系统之Ansible安装与入门
  • Word VBA快速制作试卷(2/2)
  • STM32——寄存器映射
  • 安宝特新闻丨安宝特与Logivations正式建立合作伙伴关系,共筑物流新未来
  • AI应用—C++在AI中的应用
  • 1.DRF 环境安装与配置
  • 《C++继承详解:从入门到理解公有、私有与保护继承》
  • Ansible+Shell框架中,如何管理敏感信息
  • [蓝牙通信] NimBLE init启动 | 时间抽象-转换
  • C语言基础第15天:从数组指针到指针函数
  • 快速构建基于React.js的用户注册与登录的Web应用程序
  • 图像识别边缘算法
  • 数学建模算法-day[13]
  • QGIS基于规则的道路分级制图及Leaflet集成展示实例
  • Polkadot 的 Web3 哲学:从乔布斯到 Gavin Wood 的数字自由传承
  • 开始记录一步步学习pcl
  • Go语言-->变量
  • DBAPI 实现分页查询的两种方法
  • 若依【(前后端分离版)SpringBoot+Vue3】
  • JVM 笔记:类加载、内存管理、垃圾收集与垃圾收集器