xpath extract / text()使用scrapy shell返回空?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (424)

我需要以下方面的帮助:

在scrapy shell中并尝试返回文本和xpath表达式。当我/text()在xpath上使用该方法时,我得不到任何回报。当我使用没有它的表达式时,我得到了带有href的数据。我不明白为什么/text()不起作用?

网址是“ https://matchstat.com/tennis/all-upcoming-matches

xpath

In [71]: response.xpath("//td[contains(@class,'player-
name')]").extract()[0]

Out[71]: '<td class="player-name"> <href="https://matchstat.com/tennis/player/H%20Kontinen%20%2F%20J%20Peers">  H Kontinen / J Peers </a>   (FIN/AUS)   <span class="badge">1</span>  </td>'

添加/ text()

In [70]: response.xpath("//td[contains(@class,'player-
name')]/text()").extract()[0]

Out[70]: ' '

有任何想法吗?

提问于
用户回答回答于

在表达式开头使用一个点

response.xpath(".//td[contains(@class,'player-name')]").extract()[0]

或者在文本方法之前的表达式末尾添加额外的锚标记。

response.xpath("//td[contains(@class,'player-name')]/a/text()").extract()[0]
用户回答回答于

第一个xpath表达式返回一个Elements列表。你将获得此列表中的第一个项目,即单个<td>元素。

第二个xpath表达式返回相同<td>Elements 的子文本节点列表。你得到的拳头孩子这是一个单一空间:之间的一个<td class="player-name"><href...>。(应该是<a href=...)。

注意:你感到困惑,因为第一种情况下返回的元素打印为字符串。但这是带子项的元素:文本模式'',a带子文本节点的元素“H Kontinen / J Peers”等。

扫码关注云+社区

领取腾讯云代金券