我需要以下方面的帮助:
在一个粗糙的shell中,尝试返回和xpath表达式的文本。当我在xpath上使用/text()
方法时,我什么也得不到。当我使用不带它的表达式时,我会得到带有href的数据。我不明白为什么/text()
不能工作?
网址为"https://matchstat.com/tennis/all-upcoming-matches“
不带/text()
的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]: ' '
有什么想法吗?
发布于 2017-07-12 05:51:26
第一个xpath表达式返回一个元素列表。您将获得该列表的第一项,它是一个单独的<td>
元素。
第二个xpath表达式返回相同<td>
元素的子文本节点列表。您会得到第一个子对象,即一个空格:<td class="player-name">
和<href...>
之间的那个空格。(应该是<a href=...
)。
注意:您会感到困惑,因为第一种情况下返回的元素是以字符串形式打印的。但这是一个有子元素:一个文本模式‘',一个具有子文本节点“H Kontinen /J Peers”的a
元素,等等。
发布于 2017-07-13 18:16:32
找到了两个解决方案,它们在href之间给出返回的文本
在表达式的开头使用一个点
response.xpath(".//td[contains(@class,'player-name')]").extract()[0]
在text方法之前的表达式末尾添加额外的锚标记
response.xpath("//td[contains(@class,'player-name')]/a/text()").extract()[0]
https://stackoverflow.com/questions/45044798
复制相似问题