原文标题:《Python网络爬虫—Scrapy的选择器Xpath》 对原文有所修改和演绎

优势

XPath相较于CSS选择器,可以更方便的选取

  • 没有id class name属性的标签
  • 属性或文本特征不显著的标签
  • 嵌套层次极其复杂的标签

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']

使用函数定位

函数 含义
contains(,) 前者中包含后者
text() 获取节点中的字符串
starts-with() 匹配起始位置的字符串

<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方法。

轴名称 含义
ancestor 选取当前节点的所有先辈节点
ancestor-or-self 选取当前节点的所有先辈节点及当前节点自己
attribute 选取当前节点的所有属性
child 选取当前节点的所有子节点
descendant 选取当前节点的所有后代节点
descendant-or-self 选取当前节点的所有后代节点及当前节点自己
following 选取党建节点结束后的所有节点
parent 选取当前节点的父节点
preceding-sibling 选取当前节点之前的所有同辈节点
self 选取当前节点自己
原文地址:http://mp.weixin.qq.com/s/UT4UFDpgo2ER300zq_uqsQ

最新文章

  1. ASP.NET Core 缓存技术 及 Nginx 缓存配置
  2. arcgis engine 中出现的内存堆栈溢出问题。
  3. ubuntu 安装 netbeans C++ IDE
  4. [js开源组件开发]js多选日期控件
  5. jdk8飞行记录器配置
  6. linux下安装vtune_amplifier_xe_2015_update4
  7. Finding Nemo(bfs)
  8. word2013 无endnote选项卡咋办
  9. js算法集合(一) 水仙花数 及拓展(自幂数的判断)
  10. 关于Python中yield的一些个人见解
  11. 一对多Excel自定义函数:SVLOOKUP
  12. Cocos2d-x游戏开发之lua编辑器 Sublime 搭建,集成cocos2dLuaApi和自有类
  13. 2.2String工具类
  14. (Python基础)最Low三级菜单
  15. git pull的理解 以及 git conflict的解决
  16. 双系统windows+linux如何正确删除linux
  17. Shell脚本笔记(七)控制Shell脚本
  18. 发票打印不全不完整的解决方案(Win10)
  19. C#7.2——编写安全高效的C#代码
  20. How to temporally disable IDE tools (load manually)

热门文章

  1. HDU 5898 odd-even number
  2. C# Note21: 扩展方法(Extension Method)及其应用
  3. centos7系统管理和运维实战——运维必备的网络管理技能(1)
  4. Jmeter安装与使用(压测)
  5. spring程序打包war,直接通过-jar启动,并指定spring.profiles.active参数控制多环境配置
  6. Java使用RabbitMQ之消息确认(confirm模板)
  7. 百度云虚拟主机配置 Thinkphp5.1
  8. sun.misc.BASE64Encoder----》找不到jar包的解决方法
  9. Web API2 使用默认Identity
  10. iOS 通知推送APNS