Xpath

博客主要介绍了Xpath的定位方法,包括相对定位、绝对路径、last()方法、属性查找@、表达式and、or、!=、not查找、模糊匹配、精准匹配、使用大于小于符号定位以及轴方式定位等,为使用Python进行爬虫开发时的元素定位提供了详细指导。

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标签下的第一个
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值