Xpath
Xpath的定位方法
相对定位
相对定位是两个“//”表示,也表示多个层级

绝对路径
绝对定位用一个杠“/”,表示一个层级,绝对路径一个层级变化所有空间都有变化

last()方法
当标签存在多个相同的时候,可以使用xpath中的last()方法,定位到最后一个

//标签名[last()]
//span/ul//li[last()]
如果我们要定位到倒数第二个,可以在last() 后面加上 -1,代表倒数第二个

//标签名[last()-1]
//span/ul//li[last()-1]
属性查找@
这里我们以百度为例,如果我们要定位到百度的id元素,那么可以使用 //标签名[@元素名称=‘元素值’]

//标签名[@元素名称='元素值']
//input[@id='kw']
表达式and
当一个元素无法定位到唯一值得时候,我们可以使用and表达式,同一个标签下定位多个元素(也可用后面text()一起使用)

//标签名[@元素名称='元素值' and @元素名称='元素值']
//input[@id='kw' and @class='s_ipt']
表达式or
xpath 中 or的表达式和and很像,指的是当你元素满足其中一个条件的时候,就可以定位到,如图,在百度搜索框中,我们故意将@class='s_t’元素写错,内容中并没有这个元素

// 标签名[@元素名称='元素值' or @元素名称='元素值']
//input[@id='kw' or @class='s_t']
表达式!=
如图,如果我们想要查找元素值不等于某个值的内容,可以使用!=方法,但是这个方法在工作中用的比较少,目前我还没有用到过,不过xapth提供了这个方法,可以结合场景使用~

//标签名称[@元素名称 != '元素值']
//input[@class!='1111']
not查找
//标签名[not(.='元素值')
//year[not(.=2005)]
//div[not(@id="tab-AndroidVersions")]
意思就是查找year内容不为2005的内容 注:“.”就等于text()
模糊匹配

//标签名[contains(text(), "内容"]
//div[contains(text(), "更新")]
精准匹配

//标签名[(text()='内容')]
//div[(text()='更新文案')]
使用大于小于符号定位

//div[@class="cell" and text()>'1336']
//div[@class="cell" and text()<'1336']
如图,当我们商品列表中有多个商品ID,那我们想要定位到ID大于或者小于1336的数据,可以通过上面的方式。
轴方式定位
轴表达式说明
parent::* :表示当前节点的父节点元素
ancestor::* :表示当前节点的祖先节点元素
child::* :表示当前节点的子元素 /A/descendant::* 表示A的所有后代元素
self::* :表示当前节点的自身元素
ancestor-or-self::* :表示当前节点的及它的祖先节点元素
descendant-or-self::* :表示当前节点的及它们的后代元素
following-sibling::* :表示当前节点的后序所有兄弟节点元素
preceding-sibling::* :表示当前节点的前面所有兄弟节点元素
following::* :表示当前节点的后序所有元素
preceding::* :表示当前节点的所有元素
1.parent::当前节点的父节点元素

//div[@class="cell" and text()='1338']/parent::*
如图,我们要定位到ID为1338元素的父节点元素,可以使用如上xpath轴定位, “*” 表示匹配所有
2.使用position位置定位

//th[@class="c-id " and position()=1]
意思是定位到th标签下的第一个
博客主要介绍了Xpath的定位方法,包括相对定位、绝对路径、last()方法、属性查找@、表达式and、or、!=、not查找、模糊匹配、精准匹配、使用大于小于符号定位以及轴方式定位等,为使用Python进行爬虫开发时的元素定位提供了详细指导。

8万+

被折叠的 条评论
为什么被折叠?



