爬虫之XPath的使用

在网络爬虫中,对于HTML的解析,XPath是一种常用的方法。XPath 最初是用于XML中,其主要使用路径表达式在 XML 文档中进行导航。用于HTML中主要是因为HTML和XML非常的相似:
它们具有类似的文件结构。都有唯一的根元素。都采用标签的方式。
同时又有点不同:
XML可以自定义标签而HTML的标签是确定的
XML用于描述数据(和JSON一样)而HTML用于显示数据(经过浏览器处理)

XPath的解析需要依赖于"lxml"库。为了方便我们可以在谷歌浏览器安装XPath插件:xpath.crx 。使用xpath必须对HTML具有一定的了解。
用于网络爬虫的XPath主要使用以下语法:

操作 意义 示例 备注
./ 从当前结点开始 ./div 选取当前结点之后的直接结点div
// 从任意结点开始 //div 选取所有的div
@ 选取属性 //div[@class = "my"] 选取class = "my"的div结点
@ 选取属性 //div[@class] 选取所有有class属性的div
* 任意匹配 //div/* div元素下的任意元素

一般在爬虫中主要进行的操作如下:

操作 示例 备注
属性定位 //input[@class="bg s_btn"] 必须把类bg和s_btn全部写进去
索引定位 //div[@id=''head"]/div/div[2]/a[1] 索引下标起始是1
层级定位 //div[@id=''head"]/div/div/ 按照层级一级一级查找
逻辑运算 //input[@class="sss" and @id = "hhh"] 同时具有两个属性的元素
模糊匹配 //input[contains(@class,'s')] contains函数:class属性包含s的所有input元素
模糊匹配 //input[start_with(@class,'s')] start_with函数:以s开头的具有class属性的所有input元素
取文本 //div[@id='u1']/a[5]/text() 取第五个a元素的文本
取属性 //div[@id='u1']/a[5]/@href 取第五个a元素的属性

使用示例:

from lxml import etree #先导入库文件

XPath使用方法主要有两种:
(1)本地文件

tree = etree.parse("test.html")#写入本地文件的路径
ret  = tree.xpath('//div[@id="u1"]/a[5]/@href')#注意单引号和双引号的使用

(2)网络文件

r = requests.get(url)
tree = etree.THML(r.text) #注意这里是方法HTML(),并且放入对象的文本

XPath还可以用于返回的对象

#取返回class = "my"的div列表的第一个
first_div = tree.xpath('//div[@class = "my"]')[1]
#取出当前结点后所有具有class = "son"属性的div下的p的文本
p_text  =  first_div.xpath('.//div[@class = "son"]/p/text()')#注意双斜线前边的点

jsonpath的使用https://www.cnblogs.com/angle6-liu/p/10580792.html

你可能感兴趣的:(爬虫之XPath的使用)