​Python lxml库的安装和使用​

本文介绍lxml库的安装及使用流程,并通过实例演示如何提取HTML文档中的文本信息和属性值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 Xpath 表达式提供了良好的支持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。

安装lxml库

lxml 属于 Python 第三方库,因此需要使用如下方法安装:

pip3 install lxml

在 CMD 命令行验证是否安装成功。若引入模块,不返回错误则说明安装成功。

>>> import lxml
>>>

lxml使用流程

lxml 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面我们简单介绍一下 lxml 库的使用流程,如下所示:

1) 导入模块

from lxml import etree

2) 创建解析对象

调用 etree 模块的 HTML() 方法来创建 HTML 解析对象。如下所示:

parse_html = etree.HTML(html)

HTML() 方法能够将 HTML 标签字符串解析为 HTML 文件,该方法可以自动修正 HTML 文本。示例如下:

from lxml import etree
html_str = '''
<div>
    <ul>
         <li class="item1"><a href="link1.html">Python</a></li>
         <li class="item2"><a href="link2.html">Java</a></li>
         <li class="site1"><a href="c.biancheng.net">C语言中文网</a>
         <li class="site2"><a href="www.baidu.com">百度</a></li>
         <li class="site3"><a href="www.jd.com">京东</a></li>
     </ul>
</div>
'''
html = etree.HTML(html_str)
# tostring()将标签元素转换为字符串输出,注意:result为字节类型
result = etree.tostring(html)
print(result.decode('utf-8'))

输出结果如下:

<html><body><div>
    <ul>
         <li class="item1"><a href="link1.html">Python</a></li>
         <li class="item2"><a href="link2.html">Java</a></li>
         <li class="site1"><a href="c.biancheng.net">C&#35821;&#35328;&#20013;&#25991;&#32593;</a></li>
         <li class="site2"><a href="www.baidu.com">&#30334;&#24230;</a></li>
         <li class="site3"><a href="www.jd.com">&#20140;&#19996;</a>
     </li></ul>
</div>
</body></html>

上述 HTML 字符串存在缺少标签的情况,比如“C语言中文网”缺少一个 闭合标签,当使用了 HTML() 方法后,会将其自动转换为符合规范的 HTML 文档格式。

3) 调用xpath表达式
最后使用第二步创建的解析对象调用 xpath() 方法,完成数据的提取,如下所示:

r_list = parse_html.xpath('xpath表达式')

lxml库数据提取

下面通过一段 HTML 代码实例演示如何使用 lxml 库提取想要的数据。HTML 代码如下所示:

<div class="wrapper">
    <a href="www.biancheng.net/product/" id="site">website product</a>
    <ul id="sitename">
    <li><a href="http://www.biancheng.net/" title="编程帮">编程</a></li>
    <li><a href="http://world.sina.com/" title="新浪娱乐">微博</a></li>
    <li><a href="http://www.baidu.com" title="百度">百度贴吧</a></li>
    <li><a href="http://www.taobao.com" title="淘宝">天猫淘宝</a></li>
    <li><a href="http://www.jd.com/" title="京东">京东购物</a></li>
    <li><a href="http://c.bianchneg.net/" title="C语言中文网">编程</a></li>
    <li><a href="http://www.360.com" title="360科技">安全卫士</a></li>
    <li><a href="http://www.bytesjump.com/" title=字节">视频娱乐</a></li>
    <li><a href="http://bzhan.com/" title="b站">年轻娱乐</a></li>
    <li><a href="http://hao123.com/" title="浏览器">搜索引擎</a></li>
    </ul>
</div>

1) 提取所有a标签内的文本信息

from lxml import etree
# 创建解析对象
parse_html=etree.HTML(html)
# 书写xpath表达式,提取文本最终使用text()
xpath_bds='//a/text()'
# 提取文本数据,以列表形式输出
r_list=parse_html.xpath(xpath_bds)
# 打印数据列表
print(r_list)

输出结果:

['website product', '编程', '微博', '百度贴吧', '天猫淘宝', '京东购物', '编程', '安全卫士', '视频娱乐', '年轻娱乐', '搜索引擎']

2) 获取所有href的属性值

from lxml import etree
# 创建解析对象
parse_html=etree.HTML(html)
# 书写xpath表达式,提取文本最终使用text()
xpath_bds='//a/@href'
# 提取文本数据,以列表形式输出
r_list=parse_html.xpath(xpath_bds)
# 打印数据列表
print(r_list)

输出结果:

['http://www.biancheng.net/product/', 'http://www.biancheng.net/', 'http://world.sina.com/', 'http://www.baidu.com', 'http://www.taobao.com', 'http://www.jd.com/', 'http://c.bianchneg.net/', 'http://www.360.com', 'http://www.bytesjump.com/', 'http://bzhan.com/', 'http://hao123.com/']

3) 不匹配href=" www.biancheng.net/priduct"

from lxml import etree
# 创建解析对象
parse_html=etree.HTML(html)
# 书写xpath表达式,提取文本最终使用text()
xpath_bds='//a/@href'
# 提取文本数据,以列表形式输出
xpath_bds='//ul[@id="sitename"]/li/a/@href'
# 打印数据列表
print(r_list)

输出结果:

['http://www.biancheng.net/', 'http://world.sina.com/',
'http://www.baidu.com', 'http://www.taobao.com',
'http://www.jd.com/', 'http://c.bianchneg.net/',
'http://www.360.com', 'http://www.bytesjump.com/',
'http://bzhan.com/', 'http://hao123.com/']
03-19
### Python lxml安装方法 为了成功安装 `lxml` 広,可以采用多种方式。以下是几种常见的安装方法: #### 方法一:通过 `pip` 工具安装 最简单的方式是利用 `pip` 来完成安装。运行以下命令即可完成安装: ```bash pip3 install lxml ``` 这种方法适用于大多数环境,并能自动处理依赖项[^1]。 #### 方法二:基于 Linux 系统包管理器 对于某些特定操作系统(如 Ubuntu),可能需要先安装必要的开发文件才能顺利编译并安装 `lxml`。可以通过系统的包管理工具来实现这一目标。例如,在 Debian/Ubuntu 上执行以下命令: ```bash sudo apt-get update && sudo apt-get install libxml2-dev libxslt1-dev python-dev ``` 随后再尝试使用 `pip` 进行安装[^4]。另外一种替代方案是在不借助 `pip` 的情况下直接安装预构建好的软件包: ```bash sudo apt-get install python-lxml ``` 这一步骤会从官方源下载已编译版本从而跳过手动配置阶段[^2]。 #### 方法三:Windows 平台下的解决方案 如果处于 Windows 操作系统下,则推荐访问非官方但可靠的 wheel 文件托管站点获取对应架构的.whl文件后双击打开或者通过命令提示符切换至该目录后再输入相应指令完成加载工作;当然也可以继续沿用标准流程即单纯依靠 pip 命令自行寻找合适的二进制分发版来进行部署操作[^3]。 ### Python lxml的基础使用教程 一旦完成了上述任一途径中的设置步骤之后就可以着手学习如何运用这个强大的解析引擎啦! 假设我们现在拥有这样一个简单的HTML字符串样本作为待分析对象: ```html <html> <body> <h1>Title</h1> <p>Paragraph text.</p> </body> </html> ``` 我们可以按照如下方式进行初始化读取与节点选取动作演示: ```python from lxml import etree # 创建一个ElementTree对象 html_content = ''' <html> <body> <h1>Title</h1> <p>Paragraph text.</p> </body> </html> ''' tree = etree.HTML(html_content) # 提取出<h1>标签内的文字内容 title_text = tree.xpath('//h1/text()')[0] print(title_text) # 输出: Title ``` 在此案例里我们首先引入了来自'lxml'模块里的etree子组件以便后续调用其内部定义的方法函数等功能特性;接着创建了一个包含基础结构化数据形式(这里是模拟网页片段)的新变量存储起来供下一步加工处理之需;最后则示范展示了怎样定位到具体位置处抓取所需信息字段出来展示给用户查看。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haowll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值