在网络爬虫中,对于HTML的解析,XPath是一种罕用的办法。XPath 最后是用于XML中,其次要应用门路表达式在 XML 文档中进行导航。用于HTML中次要是因为HTML和XML十分的类似:它们具备相似的文件构造。都有惟一的根元素。都采纳标签的形式。
同时又有点不同,XML能够自定义标签而HTML的标签是确定的XML用于形容数据(和JSON一样)而HTML用于显示数据(通过浏览器解决)。
XPath的解析须要依赖于"lxml"库。为了不便咱们能够在谷歌浏览器装置XPath插件:xpath.crx 。应用xpath必须对HTML具备肯定的理解。
用于网络爬虫的XPath次要应用以下语法:
练习代码如下:
#!/usr/bin/env python# _*_ coding:utf-8 _*_from lxml import etreeif __name__ == '__main__': text = ''' <div> <ul> <li class="item-0"><a href="link1.html">first 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> ''' # 1.转换成 lxml文档 html_data = etree.HTML(text) # 2. 格式化 理解 html_result = etree.tostring(html_data) # print html_result # 3.把握的 xpath # 3.1取出所有的li标签 #result = html_data.xpath('//li') # 3.2获取所有a #result = html_data.xpath('//li/a') # 3.3 取出内容 #result = html_data.xpath('//li/a/text()') # 3.4 取出 属性的值 result = html_data.xpath('//li[@class="item-inactive"]/a/@href') # 3.5 含糊查问 contains #result = html_data.xpath('//li[contains(@class,"1")]') print(result)# . 选取以后节点。# .. 选取以后节点的父节点。# @ 选取属性。# * 任意匹配 //div/* div元素下的任意元素# // 从匹配抉择的以后节点抉择文档中的节点,而不思考它们的地位。# //div 选取所有的div# //div[@class = "my"] 选取class = "my"的div结点# //title[@lang] 选取所有领有名为 lang 的属性的 title 元素。# //title[@lang=’eng’] 选取所有 title 元素,且这些元素领有值为 en
获取演示代码,请在公众号回复 ‘xPath’ 。