我需要以下方面的帮助:
在scrapy shell中并尝试返回和xpath表达式的文本。
当我在xpath上使用/text()
方法时,我得不到任何回报。当我使用没有它的表达式时,我得到了带有href的数据。我无法理解为什么/text()
无效?
网址是" https://matchstat.com/tennis/all-upcoming-matches"
没有/text()
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]: ' '
有什么想法吗?
答案 0 :(得分:0)
第一个xpath表达式返回一个Elements列表。您将获得此列表的第一项,即单个<td>
元素。
第二个xpath表达式返回相同<td>
元素的子文本节点列表。你得到的拳头是一个单独的空间:<td class="player-name">
和<href...>
之间的一个。 (它应该是<a href=...
)。
注意:您感到困惑,因为第一种情况下返回的元素打印为字符串。但这是一个带孩子的元素:文本模式&#39; &#39;,a
元素,带有子文本节点&#34; H Kontinen / J Peers&#34;等
答案 1 :(得分:0)
找到两个解决方案,在href
之间返回文本1。 在表达式的开头使用一个点
response.xpath(".//td[contains(@class,'player-name')]").extract()[0]
2。 在文本方法
之前的表达式末尾添加额外的锚标记response.xpath("//td[contains(@class,'player-name')]/a/text()").extract()[0]