ProFootballReference团队统计信息XPath

2024-06-25 23:44:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用这个页面上的垃圾外壳Pittsburgh Steelers at New England Patriots - September 10th, 2015来获取单个团队的统计数据。例如,我想为客队(464)拉总码数,当检查元素并复制XPath时,会产生

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

但当我跑的时候

^{pr2}$

什么也不返回。我注意到这个表与初始数据在一个单独的div中,所以我不确定是否需要从更高的起点开始。即使只是搜索一下

//*[@id="team_stats"]

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


Tags: idnewstats页面团队外壳teamat
1条回答
网友
1楼 · 发布于 2024-06-25 23:44:07

你遇到的问题是(在大多数类似的情况下)网站使用JavaScript呈现游戏的完整信息。这意味着当你在浏览器中打开时,Scrapy看不到你看到的网站。在

因为scray在加载页面后不运行任何JavaScript,所以它不会呈现出ID为team_stats的正确表。“Team Stats”表的内容在加载的网站中,但是它们被注释掉了。在

一种解决方案是提取包含团队统计信息的注释,并将注释文本转换为HTML并提取其中的数据。在

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

上面的文本提取了包含所需表的注释。在

对于将来的分析,我建议你使用Chrome的开发工具,在那里你可以禁用JavaScript来分析站点,并用这个选项加载站点。这将返回页面内容,就像Scrapy看到的那样。在

编辑

提取评论后,您可以将其输入到一个新的选择器中,就像Markus在评论中提到的那样:

^{pr2}$

在这个新的选择器上,您可以像对response对象那样再次使用.xpath()。在

删除注释分隔符很容易:您必须从提取的文本(字符串)的开头和结尾删除它。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()

相关问题 更多 >