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 文本。示例如下:

1. from lxml import etree
2. html_str = ‘’’
3.  
  
4. 5. 6. Python
7. 8. Java
9. 10. 
C语言中文网 
11. 12. 百度
13. 14. 京东
15. 16. 17. ‘’’
18. html = etree.HTML(html_str)

tostring()将标签元素转换为字符串输出,注意:result为字节类型

1. result = etree.tostring(html)
2. 
3. print(result.decode(‘utf-8’))

输出结果如下:

1.  
  
2. 3. 4. Python
5. 6. Java
7. 8. C语言中文网
9. 10. 百度
11. 12. 
京东 
13. 14.

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

3) 调用xpath表达式

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

**

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

lxml库数据提取

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

1. 
  
2. website product
3. 4. 5. 编程
6. 7. 微博
8. 9. 百度贴吧
10. 11. 天猫淘宝
12. 13. 京东购物
14. 15. 编程
16. 17. 安全卫士
18. 19. 视频娱乐
20. 21. 年轻娱乐
22. 23. 搜索引擎
24.
1) 提取所有a标签内的文本信息
  1. from lxml import etree

创建解析对象

  1. parse_html=etree.HTML(html)

书写xpath表达式,提取文本最终使用text()

  1. xpath_bds=‘//a/text()’

提取文本数据,以列表形式输出

  1. r_list=parse_html.xpath(xpath_bds)

打印数据列表

  1. print(r_list)

输出结果:

**

['website product', '编程', '微博', '百度贴吧', '天猫淘宝', '京东购物', '编程', '安全卫士', '视频娱乐', '年轻娱乐', '搜索引擎']
2) 获取所有href的属性值
  1. from lxml import etree

创建解析对象

  1. parse_html=etree.HTML(html)

书写xpath表达式,提取文本最终使用text()

  1. xpath_bds=‘//a/@href’

提取文本数据,以列表形式输出

  1. r_list=parse_html.xpath(xpath_bds)

打印数据列表

  1. 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"
1. from lxml import etree

创建解析对象

1. parse_html=etree.HTML(html)

书写xpath表达式,提取文本最终使用text()

1. xpath_bds=‘//a/@href’

提取文本数据,以列表形式输出

1. xpath_bds=‘//ul[@id=“sitename”]/li/a/@href’

打印数据列表

1. print(r_list)

输出结果: