Python lxml库怎么安装和使用 lxml解析HTML和XML

星降
发布: 2025-12-21 09:44:58
原创
573人浏览过
lxml是Python中处理HTML/XML的高效工具,推荐用pip install lxml安装,支持XPath和CSS选择器,html.etree适合不规范HTML,etree适合严格XML,注意编码、命名空间等细节。

python lxml库怎么安装和使用 lxml解析html和xml

直接用 pip 安装 lxml,然后用 etree 模块解析 HTML 或 XML,它速度快、功能全,是 Python 里处理结构化文本的主力工具

安装 lxml(推荐 pip)

在命令行运行:

  • Windows / macOS / Linux 都适用:pip install lxml
  • 如果报错缺少编译环境(比如 Ubuntu 提示 libxml2-devlibxslt-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 class="aritcle_card">
                        <a class="aritcle_card_img" href="/ai/2392">
                            <img src="https://img.php.cn/upload/ai_manual/001/246/273/176352302537509.png" alt="萝卜简历">
                        </a>
                        <div class="aritcle_card_info">
                            <a href="/ai/2392">萝卜简历</a>
                            <p>免费在线AI简历制作工具,帮助求职者轻松完成简历制作。</p>
                            <div class="">
                                <img src="/static/images/card_xiazai.png" alt="萝卜简历">
                                <span>171</span>
                            </div>
                        </div>
                        <a href="/ai/2392" class="aritcle_card_btn">
                            <span>查看详情</span>
                            <img src="/static/images/cardxiayige-3.png" alt="萝卜简历">
                        </a>
                    </div>
                <p><span>立即学习</span>“<a href="https://pan.quark.cn/s/00968c3c2c15" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">Python免费学习笔记(深入)</a>”;</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)。

  • 基础解析示例:
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(比如加 ),如不需要,可用 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"})

以上就是Python lxml库怎么安装和使用 lxml解析HTML和XML的详细内容,更多请关注php中文网其它相关文章!

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号