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)
。
答案 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()
,但是您的原始条件也可以工作。