lxml是Python中处理HTML/XML的高效工具,推荐用pip install lxml安装,支持XPath和CSS选择器,html.etree适合不规范HTML,etree适合严格XML,注意编码、命名空间等细节。

直接用 pip 安装 lxml,然后用 etree 模块解析 HTML 或 XML,它速度快、功能全,是 Python 里处理结构化文本的主力工具。
安装 lxml(推荐 pip)
在命令行运行:
-
Windows / macOS / Linux 都适用:
pip install lxml - 如果报错缺少编译环境(比如 Ubuntu 提示
libxml2-dev或libxslt-dev),先装系统依赖:sudo apt-get install libxml2-dev libxslt-dev python3-dev(Ubuntu/Debian)
macOS 可用brew install libxml2 libxslt - 国内用户若下载慢,可加清华源:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ lxml
用 etree 解析 HTML(常用场景)
lxml 的 html.etree 更适合处理不规范的网页 HTML(比如缺闭合标签、大小写混用)。
- 基础用法:从字符串或文件加载 HTML
from lxml import html
<h1>从字符串解析</h1><p>html_str = "<div><p class='title'>Hello</p></div>"
tree = html.fromstring(html_str)</p><h1>从文件解析</h1><h1>tree = html.parse("page.html")</h1><h1>用 XPath 提取内容</h1><p>title = tree.xpath("//p[@class='title']/text()") # ['Hello']
print(title)
- 注意:
html.fromstring()返回 Element 对象;html.parse()返回 Document 对象,需调.getroot()才能用 XPath
用 etree 解析 XML(严格格式)
XML 要求格式规范,推荐用 etree(不是 html.etree)。
立即学习“Python免费学习笔记(深入)”;
- 基础解析示例:
from lxml import etree
<p>xml_str = "<root><item id='1'>A</item><item id='2'>B</item></root>"
root = etree.fromstring(xml_str)</p><h1>获取所有 item 元素</h1><p>items = root.xpath("//item")
for item in items:
print(item.text, item.get("id")) # A 1 \n B 2</p><h1>或用 find/findall(更面向对象)</h1><p>first_item = root.find("item")
print(first_item.get("id")) # '1'
-
etree.fromstring()解析字符串;etree.parse("file.xml")解析文件 - 支持 XPath 1.0 全部语法,也支持 CSS 选择器(需配合
cssselect模块,但 lxml 自带cssselect)
常见问题和技巧
-
中文乱码? 确保源数据指定编码(如 HTML 中有
<meta charset="utf-8">),或手动声明:html.fromstring(html_str.encode("utf-8")) -
HTML 标签自动补全? lxml 默认会修复破损 HTML(比如加
<html><body>),如不需要,可用parser = html.HTMLParser(recover=False) -
提取后保留标签? 用
etree.tostring(element, encoding="unicode", method="html") -
命名空间 XML? 解析时传入
namespaces字典,XPath 中用前缀引用,例如root.xpath("//x:title", namespaces={"x": "http://example.com/ns"})











