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 = ‘’’
- Python
- Java
- C语言中文网
- 百度
- 京东
- ‘’’
- html = etree.HTML(html_str)
-
tostring()将标签元素转换为字符串输出,注意:result为字节类型
- result = etree.tostring(html)
- print(result.decode(‘utf-8’))
输出结果如下:
- Python
- Java
- C语言中文网
- 百度
- 京东
上述 HTML 字符串存在缺少标签的情况,比如“C语言中文网”缺少一个 闭合标签,当使用了 HTML() 方法后,会将其自动转换为符合规范的 HTML 文档格式。
3) 调用xpath表达式
最后使用第二步创建的解析对象调用 xpath() 方法,完成数据的提取,如下所示:
**
r_list = parse_html.xpath('xpath表达式')
lxml库数据提取
下面通过一段 HTML 代码实例演示如何使用 lxml 库提取想要的数据。HTML 代码如下所示:
- website product
- 编程
- 微博
- 百度贴吧
- 天猫淘宝
- 京东购物
- 编程
- 安全卫士
- 视频娱乐
- 年轻娱乐
- 搜索引擎
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)
输出结果:
零基础Python学习资源介绍
👉Python学习路线汇总👈
温馨提示:篇幅有限,已打包文件夹获取方式在:点击这里【 Python全套资料
】 即可获取。
👉Python必备开发工具👈
温馨提示:篇幅有限,已打包文件夹获取方式在:点击这里【 Python全套资料
】 即可获取。
👉Python学习视频600合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉100道Python练习题👈检查学习结果。
👉面试刷题👈
温馨提示:篇幅有限,已打包文件夹获取方式在:点击这里【 Python全套资料
】 即可获取。