原文标题:《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 | 选取当前节点自己 |