<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()
然而,我无法上课,我尝试使用以下兄弟,但我没有成功,任何帮助将不胜感激。
答案 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如果它是一个问题,有一些答案可以解释它。