【问题标题】:XPath for sibling text?兄弟文本的 XPath?
【发布时间】:2019-10-29 22:16:18
【问题描述】:

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)

【问题讨论】:

  • 您的问题得到解答了吗?如果没有,请跟进为什么不;如果是,请接受。谢谢。

标签: python html xml xpath scrapy


【解决方案1】:

这部分的 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(),但您的原始条件也可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多