Xpath匹配之避坑指南

本文总结了一些日常碰到了的xpath的坑,为了避免大家也在同样的地方浪费时间,特广而告之。引用转载请声明出处!

目录

一、Xpath匹配查询工具

二、路径中存在tbody导致匹配为空

三、交错标签的匹配

四、跳过某个序号的标签进行匹配

五、匹配项标签有差异,匹配时个数不一致

六、不定时更新...


一、Xpath匹配查询工具

Chrome上有个插件叫“XPath Helper”,装上后,按“ctrl+shift+x”就可以召唤和关掉,使用很方便,方便调试xpath路径写的是否正确。

二、路径中存在tbody导致匹配为空

当匹配路径中存在tbody时,会匹配到空列表,原因是浏览器对 xpath 进行了 “优化” ,导致从浏览器里直接复制出来的 xpath 放在python中运行匹配不到。例如下面两种情况都是路径中存在tbody

XXX = XXXX.xpath("//div[@class='tabset']/table[2]/tbody")
XXX = XXXX.xpath("//div[@class='tabset']/table[2]/tbody/tr/td[2]/a/text()")

这时候,只要删掉路径中的“tbody”即可。

三、交错标签的匹配

对于交错的标签,有两种解决办法的思路。(1)可以绕开这个标签,找其他的标签或者属性来匹配。(2)可以把两类分开匹配,a类匹配完了,再匹配b类的,合在一起即可。

四、跳过某个序号的标签进行匹配

比如这里想跳过第一个<tr>标签,可以用到position>1。

XXX.xpath("//tr[position()>1]/td[1]/input/@value").extract()

五、匹配项标签有差异,匹配时个数不一致

有时候,有些网站会给某些条目加上“NEW”,“SALE”等标签,导致网页上同样的表格中的条目对应的标签数量不一致。例如下图中的情况:

这时候要想办法绕开这个多出来的“span”标签。

XX.xpath("tr/td[2]/span/a/@href").extract()
# 绕过span标签
XXXX.xpath("tr/td[2]//a/@href").extract()

六、不定时更新...


整理不易...

猜你喜欢

转载自blog.csdn.net/Ryan_lee9410/article/details/107144213