XPath用于兄弟文本?

时间:2019-06-15 16:49:47

标签: python html xml xpath scrapy

HTML内容:

<div class="txt-block">
    <h4 class="inline">Release Date:</h4> 26 April 2019 (USA)
    <span class="see-more inline"></span>
</div>

我的XPath:

>>> response.xpath("//div[@class='txt-block']/h4[contains(text(), 'Release Date')]/parent::div/text()")
[<Selector xpath="//div[@class='txt-block']/h4[contains(text(), 'Release Date')]/parent::div/text()" data='\n    '>,
 <Selector xpath="//div[@class='txt-block']/h4[contains(text(), 'Release Date')]/parent::div/text()" data=' 26 April 2019 (USA)\n    '>,
 <Selector xpath="//div[@class='txt-block']/h4[contains(text(), 'Release Date')]/parent::div/text()" data='\n    '>]

有人可以向我解释为什么我得到包含三个结果的列表吗?它应该只返回一个。实际发布日期:26 April 2019 (USA)

1 个答案:

答案 0 :(得分:3)

XPath的这一部分

//div[@class='txt-block']/h4[contains(text(), 'Release Date')]

选择h4。然后/parent::div选择父级div。从那里开始,最后一步text()选择该div的所有文本节点子级,其中有三个:两个仅带有空格,一个带有" 26 April 2019 (USA)\n "

如果只希望使用26 April 2019 (USA),请改用以下XPath:

//div[@class='txt-block']/h4[.='Release Date:']/following-sibling::text()[1]

注释:

  • 您可以将其包装在normalize-space()中以合并空格。
  • 我已经向您展示了如何测试h4的字符串值而不是使用contains(),但是您的原始条件也可以工作。