XPath 表达式 - 层次结构

标签 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>

我正在尝试获取 “0.99 英镑”使用 XPath 表达式,到目前为止,我已经使用它到达了标签(请注意,还有另一个名为 summary-item 的类,因此我需要使用标签名称 Price 进行唯一标识)
sel.xpath('//*/div[@class="summary-item"]/label[text()="Price"]').extract()

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

最佳答案

子节点的存在可以是谓词的一部分。测试 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 如果这将是一个问题,有一些答案描述它。

关于XPath 表达式 - 层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23858820/

相关文章:

bash - 如何使用 xmllint 和 xpath 输出多行

python - 在 log 中设置 yscale 和在 log 中设置 y 变量有什么区别?

matplotlib - 如何让 matplotlib 的 `subplots` 中的每个图使用不同的轴?

python - Scrapy爬虫爬取后未获取数据

html - XPath轴中的子代,后代和后代之间的差异

java - 如何使用 Java 设计模式对一些 XPath 函数进行编程

python - pylab中的上下轴(例如w/不同单位)(或左右)

matlab - MATLAB 中的不同轴位置

vba - excel图表的条件最小轴值

xml - 如果存在重新出现的元素,则 XPATH 选择不同的第一个元素