查看原文
其他

Python网络爬虫 -- scrapy的选择器Xpath

2018-02-25 我为峰2014 Python爱好者社区

作者:我为峰2014
简书专栏:https://www.jianshu.com/u/c1ab741ef52e


Xpath简介


一般来说,使用id、name、class等属性就能对节点进行定位就能解决绝大部分解析需求,但有时候遇到以下情况,使用Xpath就更方便:

  • 没有id、name、class等

  • 标签的属性或者文本特征不显著

  • 标签嵌套层次太复杂

Xpath是XMLPath的简介,基于XML树状结构,可以在整个树中寻找锁定目标节点。由于HTML文档本身就是一个标准的XML页面,因此我们可以使用XPath的语法来定位页面元素。

Xpath定位方法


一、Xpath路径


Xpath路径案例


定位节点

#查找html下的body下的form下的所有input节点 /html/body/form/input #查找所有input节点 //input

通配符*选择未知的节点

#查找form节点下的所有节点 //form/*#查找所有节点//* #查找所有input节点(input至少有爷爷辈亲戚节点) //*/input

二、使用索引


如果筛选时元素时出现多个节点,但我们想确定唯一节点。可以使用类似于列表索引的方式精确定位。

案例

#定位 第8个td下的 第2个a节点 //*/td[7]/a[1] #定位 第8个td下的 第3个span节点 //*/td[7]/span[2] #定位 最后一个td下的  最后一个a节点 //*/td[last()]/a[last()]

三、使用属性

为了让定位更精准,跟使用索引类似,我们要增加信息量,那么还可以使用属性。@符号是属性符

#定位所有包含name属性的input节点 //input[@name] #定位含有属性的所有的input节点 //input[@*] #定位所有value=2的input节点 //input[@value='2'] #使用多个属性定位 //input[@value='2'][@id='3'] 或者//input[@value='2' and @id='3']

四、常用函数

除了索引、属性外,Xpath还可以使用便捷的函数来增强定位的准确性。下面试常用的几个函数:

<a class="menu_hot" href="/ads/auth/promote.html">应用推广</a>


#定位href属性中包含“promote.html”的所有a节点 //a[contains(@href,'promote.html')] #元素内的文本为“应用推广”的所有a节点 //a[text()='应用推广'] #href属性值是以“/ads”开头的所有a节点 //a[starts-with(@href,'/ads')]

五、Xpath轴

这部分类似BeautifulSoup中的sibling、parents、children方法。


Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

小编的Python入门视频课程!!!

崔老师爬虫实战案例免费学习视频。

丘老师数据科学入门指导免费学习视频。

陈老师数据分析报告制作免费学习视频。

玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。

丘老师Python网络爬虫实战免费学习视频。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存