使用XPath
XPath,全称XML Path Language,即XML路径语言,它是一门在xml文档中查找信息的语言。它最初是用来搜寻XML文档的,但是它同样使用于HTML文档的搜索。
所以在做爬虫时,我们完全可以使用XPath来做相应的信息抽取。
XPath 常用规则
表 达 式 描 述
nodename 选取此节点的所有节点
/ 从当前节点选取直接子节点
// 从当前节点选取子孙节点
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性
例如://title[@lang="eng"]
这就是一个规则,它代表选择所有名称为title,同时书属性lang的值为eng的节点。
准备工作
使用之前,首先要确保安装好lxml库,window下命令行下输入 pip3 install lxml
实例引入
现在通过实例来感受一下XPath来对网页解析的过程,相关的代码如下:
text = ''' <div> <ul> <li class='item-0'><a href="link1.html">frist item</a></li> <li class='item-1'><a href="link2.html">second item</a></li> <li class='item-inactive'><a href="link3.html">third item</a></li> <li class='item-1'><a href="link4.html">fourth item</a></li> <li class='item-0'><a href="link5.html">fifth item</a> </ul> </div> ''' # 调用HTML进行初始化,构造XPath解析对象 html = etree.HTML(text) result = etree.tostring(html) print(result.decode('utf8'))
结果:
<html><body><div> <ul> <li class="item-0"><a href="link1.html">frist item</a></li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-inactive"><a href="link3.html">third item</a></li> <li class="item-1"><a href="link4.html">fourth item</a></li> <li class="item-0"><a href="link5.html">fifth item</a> </li></ul> </div> </body></html>
这里我们调用tostring()方法输出修正后的html代码(注意最上面的html最后的一个li节点是没有闭合的),但是结果是byte类型的。这里利用decode()方法将其转成str类型。