仅在满足条件时如何选择xpath

时间:2017-02-16 21:20:50

标签: python html xpath scrapy web-crawler

我的HTML看起来像这样:

div class = 'a-row a-spacing-small'
div class = 'a-row'

(这些是同一级别,我的意思是第二个div不是第一个div的孩子)(两个都是同一级别的父母)

我想从第hrefdiv的内层中选择class = 'a-row a-spacing-small',只有在class = 'a-row'满足条件的第二个div的内层中。

我该怎么做?

任何想法

1 个答案:

答案 0 :(得分:0)

所以对于你的xpath,你想要从容易识别的元素或根开始,在这种情况下,第一个div类是'a-row a-spacing-small'

//div[@class='a-row a-spacing-small']

接下来将确定您的元素与此根元素的关系,因此在这种情况下,您需要一个href a,它应位于div内我们确定了..但你不确定它是否是直接的孩子......所以你使用//

//div[@class='a-row a-spacing-small']//a/@href

但是你只需要这个元素,如果它旁边的div满足条件..那么我们应该在xpath的开头放一些东西,然后我们已经创建了xpath ...

//<somexpath>/div[@class='a-row a-spacing-small']//a/@href

但xpath是什么?我们知道的是我们将第二个div作为根,因为它具有我们想要的条件......

//div[@class='a-row']

那么第一个div如何与我们的新根相关联?它是preceding-sibling因为它在新根之前并且它在同一级别上。

//div[@class='a-row']/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

现在无论条件是什么,我们都需要将它包含在根...

//div[@class='a-row' and <condition>]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

的示例:

如果条件是div应该有a文本&#34;条件链接&#34;: //div[@class='a-row' and .//a[text()='conditional link']]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

如果条件是div应该具有禁用属性: //div[@class='a-row' and @disabled]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

没有禁用属性怎么样? //div[@class='a-row' and not(@disabled)]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

玩它......