<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/