2016-08-05 55 views
0

我使用Pittsburgh Steelers at New England Patriots - September 10th, 2015此页面上的scrapy壳拉个人团队统计。例如,我想拉总码为客队(464),其中,检查元素和复制时的XPath产生临足球引用球队统计的XPath

//*[@id="team_stats"]/tbody/tr[5]/td[1] 

但是当我运行

response.xpath('//*[@id="team_stats"]/tbody/tr[5]/td[1]') 

不返回任何结果。我注意到这张表与最初的数据是分开的,所以我不确定是否需要从更高的位置开始。即使只是搜索

//*[@id="team_stats"] 

xpath不返回任何内容。任何帮助将不胜感激。

回答

1

你遇到的问题是(因为在大多数情况下是这样),该网站使用JavaScript来渲染游戏的完整信息。这意味着Scrapy在浏览器中打开时看不到该网站。

因为Scrapy不会加载它不与ID team_stats呈现出右表的页面之后运行任何JavaScript。 “团队统计”表格的内容位于加载的网站中,但它们已被注释掉。

一个解决办法是,以提取其中包含了团队统计注释和转换是注释文本,以HTML并提取发现那里的数据。

response.xpath('//div[@id="all_team_stats"]//comment()').extract() 

上面的文字摘录了包含您所需表格的注释。

对于未来的分析,我建议你使用Chrome的开发者工具,您可以分析网站禁用JavaScript和与该选项加载网站。这将返回页面的内容,Scrapy会看到它。

编辑

后您提取的评论,你可以将其送到就像马库斯在他的评论中提及了一个新的选择:

new_selector = Selector(text=extracted_text) 

并以此为新的选择,你可以再次使用.xpath()作为你会在response对象上做。

删除注释分隔符很简单:你必须从一开始就和它是一个字符串的提取文本的结尾将其删除。 HTML中的注释从<!--开始并以-->结束。您需要将这些字符之间的文本提供给新的选择器。

扩展上面的例子:

extracted_text = response.xpath('//div[@id="all_team_stats"]//comment()').extract()[0] 
new_selector = Selector(text=extracted_text[4:-3].strip()) 
new_selector.xpath('//*[@id="team_stats"]/tbody/tr[5]/td[1]').extract() 
+0

你可以提到所提取的注释文本可以被用来作为输入到另一个选择,注释分隔符已被删除后。 – Markus

+0

非常感谢你们俩。 – Jeff

+0

关于GHajba或@Markus,还有一个问题,你能指点我一个参考,我可以学习如何将注释转换为html或删除这些分隔符? – Jeff