lxml 教程:Python 中高效处理 XML 和 HTML 的利器

server/2025/2/11 21:43:16/

一、引言

在 Python 开发中,经常需要处理 XML 和 HTML 数据,如网页数据抓取、配置文件解析等。lxml 是一个功能强大且高效的库,它基于 libxml2 和 libxslt 库,提供了简洁易用的 API 来处理 XML 和 HTML 文档。本教程将详细介绍 lxml 的安装、基本使用方法以及一些高级技巧。

二、安装 lxml

可以使用 pip 来安装 lxml,打开命令行工具并执行以下命令:

pip install lxml

 如果遇到权限问题,可能需要在命令前加上 sudo(适用于 Linux 或 macOS)。

三、解析 XML 和 HTML 文档

3.1 解析 XML 文档

以下是一个简单的示例,展示如何使用 lxml 解析 XML 文档:

python">from lxml import etree# XML 数据
xml_data = '''
<students><student id="1"><name>Alice</name><age>20</age></student><student id="2"><name>Bob</name><age>22</age></student>
</students>
'''# 解析 XML 数据
root = etree.fromstring(xml_data)# 遍历学生信息
for student in root.findall('student'):student_id = student.get('id')name = student.find('name').textage = student.find('age').textprint(f"Student ID: {student_id}, Name: {name}, Age: {age}")

在上述代码中,首先使用 etree.fromstring() 方法将 XML 字符串解析为一个 Element 对象,然后使用 findall() 和 find() 方法来查找和访问 XML 元素。

3.2 解析 HTML 文档

lxml 同样可以用于解析 HTML 文档,以下是一个示例:

python">from lxml import etree# HTML 数据
html_data = '''
<!DOCTYPE html>
<html>
<head><title>Example Page</title>
</head>
<body><h1>Welcome to the Example Page</h1><p>This is a paragraph.</p>
</body>
</html>
'''# 解析 HTML 数据
parser = etree.HTMLParser()
root = etree.fromstring(html_data, parser)# 获取标题和段落文本
title = root.find('.//title').text
paragraph = root.find('.//p').textprint(f"Title: {title}")
print(f"Paragraph: {paragraph}")

这里使用 etree.HTMLParser() 创建一个 HTML 解析器,然后将其传递给 etree.fromstring() 方法来解析 HTML 数据。

四、使用 XPath 进行数据提取

XPath 是一种用于在 XML 和 HTML 文档中定位元素的强大语言,lxml 对 XPath 提供了很好的支持。以下是一个使用 XPath 提取数据的示例:

python">from lxml import etreexml_data = '''
<books><book category="fiction"><title lang="en">Harry Potter</title><author>J.K. Rowling</author><year>2005</year></book><book category="non-fiction"><title lang="en">Python Crash Course</title><author>Eric Matthes</author><year>2015</year></book>
</books>
'''root = etree.fromstring(xml_data)# 使用 XPath 提取所有书籍的标题
titles = root.xpath('//book/title/text()')
for title in titles:print(title)# 使用 XPath 提取类别为 "non-fiction" 的书籍的作者
authors = root.xpath('//book[@category="non-fiction"]/author/text()')
for author in authors:print(author)

 在这个示例中,xpath() 方法用于执行 XPath 表达式,返回符合条件的元素或文本。

五、创建和修改 XML 文档

5.1 创建 XML 文档

python">from lxml import etree# 创建根元素
root = etree.Element('employees')# 创建子元素
employee1 = etree.SubElement(root, 'employee', id='1')
name1 = etree.SubElement(employee1, 'name')
name1.text = 'John Doe'
age1 = etree.SubElement(employee1, 'age')
age1.text = '30'employee2 = etree.SubElement(root, 'employee', id='2')
name2 = etree.SubElement(employee2, 'name')
name2.text = 'Jane Smith'
age2 = etree.SubElement(employee2, 'age')
age2.text = '25'# 将 XML 文档写入文件
tree = etree.ElementTree(root)
tree.write('employees.xml', encoding='utf-8', xml_declaration=True, pretty_print=True)

 上述代码展示了如何使用 lxml 创建一个 XML 文档并将其保存到文件中。

5.2 修改 XML 文档

python">from lxml import etree# 解析 XML 文件
tree = etree.parse('employees.xml')
root = tree.getroot()# 修改员工信息
for employee in root.findall('employee'):if employee.get('id') == '1':age = employee.find('age')age.text = '31'# 将修改后的 XML 文档写回文件
tree.write('employees.xml', encoding='utf-8', xml_declaration=True, pretty_print=True)

 这里首先解析一个 XML 文件,然后找到需要修改的元素并更新其内容,最后将修改后的文档写回文件。

六、高级技巧

6.1 处理大型 XML 文件

对于大型 XML 文件,可以使用 iterparse() 方法进行逐行解析,避免将整个文件加载到内存中:

python">from lxml import etreecontext = etree.iterparse('large_file.xml', events=('end',), tag='record')
for event, element in context:# 处理每个记录print(element.find('field').text)# 释放元素以节省内存element.clear()while element.getprevious() is not None:del element.getparent()[0]

 6.2 处理 HTML 表单数据

在处理 HTML 表单数据时,可以使用 lxml 来提取表单字段和值:

python">from lxml import etreehtml_data = '''
<form action="/submit" method="post"><input type="text" name="username" value="john_doe"><input type="password" name="password" value="secret"><input type="submit" value="Submit">
</form>
'''parser = etree.HTMLParser()
root = etree.fromstring(html_data, parser)form_fields = {}
for input_element in root.findall('.//input'):name = input_element.get('name')value = input_element.get('value')if name and value:form_fields[name] = valueprint(form_fields)

 七、总结

lxml 是一个功能强大、高效且易于使用的 Python 库,用于处理 XML 和 HTML 数据。通过本教程,你学习了如何安装 lxml,解析和创建 XML/HTML 文档,使用 XPath 进行数据提取,以及一些高级技巧。希望这些知识能帮助你在实际项目中更好地处理 XML 和 HTML 数据。


http://www.ppmy.cn/server/166413.html

相关文章

Python(Pandas)数据分析学习

1.Pandas基本构成 引入Pandas import pandas as pd 1.Series 行 对应Excel中的一行数据&#xff0c;一维数据 定义Series # 第一个参数是具体数据 # 第二个参数的对应的索引下标 # 第三个参数的行名称 data pd.Series([1,2,3,4,5], index[a,b,c,d,e], namedata) print(d…

edu小程序挖掘严重支付逻辑漏洞

edu小程序挖掘严重支付逻辑漏洞 一、敏感信息泄露 打开购电小程序 这里需要输入姓名和学号&#xff0c;直接搜索引擎搜索即可得到&#xff0c;这就不用多说了&#xff0c;但是这里的手机号可以任意输入&#xff0c;只要用户没有绑定手机号这里我们输入自己的手机号抓包直接进…

Maven概述与安装

目录 Maven 概述 1. 什么是 Maven 2. Maven 的主要功能 3. Maven 的优势 Maven 安装 1. 系统要求 2. 下载 Maven 3. 解压 Maven 4. 配置环境变量 Windows 系统 1.配置环境变量&#xff1a; 2.验证安装&#xff1a; Linux 系统 1. 打开终端窗口 2. 打开 .bashrc 文…

理解UML中的四种关系:依赖、关联、泛化和实现

在软件工程中&#xff0c;统一建模语言&#xff08;UML&#xff09;是一种广泛使用的工具&#xff0c;用于可视化、设计、构造和文档化软件系统。UML提供了多种图表类型&#xff0c;如类图、用例图、序列图等&#xff0c;帮助开发者和设计师更好地理解系统的结构和行为。在UML中…

day 40 复习makefile以及51单片机

1.makefile 1.流程 1.将源文件和头文件以及库分别放在src include lib中 2.在源码目录下创建一个名为makefile的文件 3.编写makefile代码。 4.make编译 2.怎么编写代码 通过定义变量 将gcc main.c tree.c queue.c -o app -lm -lpthread 转换 1.定义变量&#xff08;所有变…

C语言:将四个八位无符号数据拼接成32位的float数据

目录 方法一&#xff1a;使用 union 解释 方法二&#xff1a;使用 memcpy 解释 方法三&#xff1a;直接指针类型转换&#xff08;不推荐&#xff09; 综合推荐 使用 union 方法 注意事项 验证代码 在 STM32H7 这样的嵌入式系统中&#xff0c;将四个 8 位无符号数据&am…

国内知名Deepseek培训师培训讲师唐兴通老师讲授AI人工智能大模型实践应用

课程名称 《Deepseek人工智能大模型实践应用》 课程目标 全面了解Deepseek人工智能大模型的技术原理、功能特点及应用场景。 熟练掌握Deepseek大模型的提示词工程技巧&#xff0c;能够编写高质量的提示词。 掌握Deepseek大模型在办公、营销等领域的应用方法&#xff0c;提升…

无人机GPS模块概述!

一、GPS模块 原理&#xff1a;GPS模块通过接收来自卫星系统的信号&#xff0c;计算出无人机当前的位置、速度和时间等信息。它主要由接收天线、接收器、信号处理器和电源等组成。接收天线接收来自卫星的GPS信号&#xff0c;接收器将信号转换为数字信号并传输给信号处理器&…