直接用 pip install lxml 安装,Windows 通常无问题,macOS/Linux 需先装 libxml2/libxslt 依赖或换源;支持 XPath/CSS 解析、修改与美化输出,注意避免与标准库混用、处理中文编码及大文件流式解析。

直接用 pip 安装 lxml 就行,但要注意它依赖系统级 C 库(libxml2 和 libxslt),Windows 用户基本一键搞定,macOS 和 Linux 有时需要先装依赖或换源。
安装 lxml(不同系统)
大多数情况运行这句就够了:
pip install lxml
如果报错(比如编译失败、找不到 libxml2):
立即学习“Python免费学习笔记(深入)”;
- Windows:通常没问题;若用 Anaconda,可试 conda install lxml
- macOS(M1/M2 或新版本):先装依赖 brew install libxml2 libxslt,再 pip install;或者用 pip install lxml --binary 跳过编译
- Ubuntu/Debian:sudo apt-get install libxml2-dev libxslt-dev python3-dev,再 pip install
- 国内用户可加清华源加速:pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple/
解析 XML 的三种常用方式
lxml 支持 ElementTree 风格(类似标准库 xml.etree)和更强大的 XPath、CSS 选择器。
假设有如下 XML 字符串:
-
用 etree.parse() 读文件:
from lxml import etree
tree = etree.parse("books.xml")
root = tree.getroot() -
用 etree.fromstring() 解析字符串:
root = etree.fromstring(xml_str) -
快速查节点(XPath):
titles = root.xpath("//title/text()") # ['Python入门', '数据结构']
first_book = root.xpath("//book[@id='1']")[0]
author = first_book.find("author").text # '张三'
写入和修改 XML
修改后保存很简单:
- 改内容:elem.text = "新标题" 或 elem.set("id", "3")
- 加子节点:new_book = etree.SubElement(root, "book", id="3")
- 保存到文件:tree.write("new_books.xml", encoding="utf-8", xml_declaration=True)
- 美化输出(带缩进):print(etree.tostring(root, pretty_print=True, encoding="unicode"))
常见坑和建议
- 别混用标准库 xml.etree 和 lxml.etree —— 它们类型不兼容,比如 etree.Element 和 xml.etree.ElementTree.Element 不能直接传给对方方法
- 解析含中文的 XML 时,确保声明了编码(如 ),否则可能乱码
- 网络获取的 XML 建议加异常处理:try...except etree.XMLSyntaxError
- 大文件别用 fromstring() 一次性加载,用 iterparse() 流式解析更省内存
基本上就这些。lxml 速度快、功能全,学完 XPath 几乎能应付所有 XML 场景。










