你遇到的问题是(因为在大多数情况下是这样),该网站使用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()
你可以提到所提取的注释文本可以被用来作为输入到另一个选择,注释分隔符已被删除后。 – Markus
非常感谢你们俩。 – Jeff
关于GHajba或@Markus,还有一个问题,你能指点我一个参考,我可以学习如何将注释转换为html或删除这些分隔符? – Jeff