首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >xpath提取/text()使用scrapy shell返回空

xpath提取/text()使用scrapy shell返回空
EN

Stack Overflow用户
提问于 2017-07-12 05:31:08
回答 2查看 1K关注 0票数 -2

我需要以下方面的帮助:

在一个粗糙的shell中,尝试返回和xpath表达式的文本。当我在xpath上使用/text()方法时,我什么也得不到。当我使用不带它的表达式时,我会得到带有href的数据。我不明白为什么/text()不能工作?

网址为"https://matchstat.com/tennis/all-upcoming-matches

不带/text()的xpath

代码语言:javascript
复制
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()

代码语言:javascript
复制
In [70]: response.xpath("//td[contains(@class,'player-
name')]/text()").extract()[0]

Out[70]: ' '

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2017-07-12 05:51:26

第一个xpath表达式返回一个元素列表。您将获得该列表的第一项,它是一个单独的<td>元素。

第二个xpath表达式返回相同<td>元素的子文本节点列表。您会得到第一个子对象,即一个空格:<td class="player-name"><href...>之间的那个空格。(应该是<a href=...)。

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

票数 0
EN

Stack Overflow用户

发布于 2017-07-13 18:16:32

找到了两个解决方案,它们在href之间给出返回的文本

在表达式的开头使用一个点

代码语言:javascript
复制
response.xpath(".//td[contains(@class,'player-name')]").extract()[0]

在text方法之前的表达式末尾添加额外的锚标记

代码语言:javascript
复制
response.xpath("//td[contains(@class,'player-name')]/a/text()").extract()[0]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45044798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档