lxml是Python中处理HTML/XML的高效工具,推荐用pip install lxml安装,支持XPath和CSS选择器,html.etree适合不规范HTML,etree适合严格XML,注意编码、命名空间等细节。
直接用 pip 安装 lxml,然后用 etree 模块解析 HTML 或 XML,它速度快、功能全,是 Python 里处理结构化文本的主力工具。
在命令行运行:
pip install lxml
libxml2-dev 或 libxslt-dev),先装系统依赖:sudo apt-get install libxml2-dev libxslt-dev python3-dev(Ubuntu/Debian)brew install libxml2 libxslt
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ lxml
lxml 的 html.etree 更适合处理不规范的网页 HTML(比如缺闭合标签、大小写混用)。
from lxml import html从字符串解析
html_str = "
Hello
" tree = html.fromstring(html_str)从文件解析
tree = html.parse("page.html")
用 XPath 提取内容
title = tree.xpath("//p[@class='title']/text()") # ['Hello'] print(title)
html.fromstring() 返回 Element 对象;html.parse() 返回 Document 对象,需调 .getroot() 才能用 XPathXML 要求格式规范,推荐用 etree(不是 html.etree)。
from lxml import etreexml_str = "
" root = etree.fromstring(xml_str) - A
- B
获取所有 item 元素
items = root.xpath("//item") for item in items: print(item.text, item.get("id")) # A 1 \n B 2
或用 find/findall(更面向对象)
first_item
= root.find("item") print(first_item.get("id")) # '1'
etree.fromstring() 解析字符串;etree.parse("file.xml") 解析文件cssselect 模块,但 lxml 自带 cssselect)),或手动声明:html.fromstring(html_str.encode("utf-8"))
),如不需要,可用 parser = html.HTMLParser(recover=False)
etree.tostring(element, encoding="unicode", method="html")
namespaces 字典,XPath 中用前缀引用,例如 root.xpath("//x:title", namespaces={"x": "http://example.com/ns"})