xpath extract / text()使用scrapy shell

时间:2017-07-11 21:31:08

标签: python xpath web-scraping scrapy

我需要以下方面的帮助:

在scrapy 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]: ' '

有什么想法吗?

2 个答案:

答案 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]