lxml的html模块,Python爬虫常用模块:lxml 模块使用简介

lxml 是一种高性能的 Python HTML/XML 解析器,它利用XPath语法来快速定位和提取节点信息,与BeautifulSoup 相比,效率更高。

lxml 用法示例

1) 使用 etree.HTML 解析 html 字符串

示例文档

6d9ca3c7b1606c4d21da0bc2a80cfa79.png

使用 lxml 解析 HTML 文档时,如果代码不规范,lxml 自动修复 HTML 节点:

# 利用 etree.HTML 将字符串解析为 HTML 文档

html = etree.HTML(text)

print(type(html))

# 运行结果:

# 将解析后的 HTML 文档转化为字符串进行查看

result = etree.tostring(html, encoding='utf-8')

print(result.decode('utf-8'))

解析后的结果如下图所示,自动补全了 li 标签,并添加了 html 、body 标签:

58fd967a197e4af8e4ef745c71b1242f.png

2) 使用 etree.parse 读取 html 文件

示例文件 demo.html

5983e22f466e6a088d21bd2e4395107d.png

# 读取文件 demo.html

html = etree.parse('demo.html')

print(type(html))

# 运行结果:

# 将读取的 HTML 文档转化为字符串进行查看

result = etree.tostring(html, encoding='utf-8')

print(result.decode('utf-8'))

读取结果如下图所示,并没有自动添加 html 、body 标签:

2bb3b6321a9eeb6d16838cd3c560f773.png

并且,当文档中代码不规范,例如第一个示例文档缺少 li 标签时,运行会产生如下报错:

lxml.etree.XMLSyntaxError:

Opening and ending tag mismatch

# 节点打开标签和关闭标签不匹配

报错原因是,parse 函数默认使用 XML 解析器,XML 的语法规则比 HTML 严格。例如,在 HTML 中,某些元素不必有一个关闭标签,而在 XML 中,省略关闭标签是非法的,所有元素都必须有关闭标签。

在读取代码不规范的 HTML 文件时,可以自己创建 HTML 解析器:

# 通过创建 HTML 解析器读取不规范的文件

parser = etree.HTMLParser(encoding='utf-8')

html =etree.parse(

"demo.html", parser=parser)

result = etree.tostring(html, encoding='utf-8')

print(result.decode('utf-8'))

运行结果如下图所示,读取成功:

05917a81a336b5a2caef496e11bed21b.png

3) 利用 XPath 获取节点信息

示例:获取 ul 节点下第二个 li 子节点的 a 节点的 href 属性

html = etree.HTML(text)

demo = html.xpath('//ul/li[2]/a/@href')

print(demo)

# 运行结果:['link2.html']

利用 XPath 提取数据的规则详见另一篇文章:

参考文档

lxml python 官方文档:

http://lxml.de/index.html

lxml库 - 简书:

https://www.jianshu.com/p/a8064ce79e94

python3解析库lxml - 博客园:https://www.cnblogs.com/zhangxinqi/p/9210211.html

https://mp.weixin.qq.com/s/qFHWzM6BTS9XJf26RHc8bw

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值