XPath表达式 - 层次结构

时间:2014-05-25 18:54:36

标签: xpath axes

    <div class="summary-item">
       <label  >Price</label>
        <div class="value">
            0.99 GBP
         </div>
   </div>


    <div class="summary-item">
       <label  >Other info</label>
       <div class="value">
           All languages
       </div>
    </div>

我正在尝试使用XPath表达式获取“0.99 GBP”,到目前为止,我已经使用此标签到达了标签(请注意,名称summary-item还有另一个类,因此我需要用标签名称来唯一标识Price)

sel.xpath('//*/div[@class="summary-item"]/label[text()="Price"]').extract()

然而,我无法上课,我尝试使用以下兄弟,但我没有成功,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

子节点的存在可以是谓词的一部分。将label的测试放入父项的谓词中,作为单独的谓词(也添加目标节点):

//div[@class="summary-item"][label[text()="Price"]]/div[@class="value"]

或与and加入:

//div[@class="summary-item" and label[text()="Price"]]/div[@class="value"]

(注意一开始你不需要//*/div。)

如果您愿意,可以使用following-sibling,它看起来像这样:

//div[@class="summary-item"]/label[text()="Price"]/following-sibling::div[@class="value"]

(此处label div 不是谓词的一部分。)

还有一件事要注意,使用XPath选择HTML类与使用CSS不同 - XPath只匹配确切的字符串,而CSS匹配即使元素在多个类中也是如此。在这种情况下,它可以正常工作,但你应该注意它。搜索StackOverflow如果它是一个问题,有一些答案可以解释它。