我试图从这个url“http://baloncestoenvivo.feb.es/Game/1881578”获取一些信息。我想得到一个表中的所有信息,这个表位于一个div中,这个div包含这个id = "keyfacts-playbyplay-content-scroll"
我使用以下代码访问此表:
table = page_soup.find(id="keyfacts-playbyplay-content-scroll").findAll("table", {"class" : "twelve even"})
然后,打印“table”看看我得到了什么,我得到了一个没有数据的tr。但是,使用firefox或chrome控制台,我们可以看到有799个表行包含数据!!!在
这是我在python控制台中打印“table”时得到的结果:
^{pr2}$这是我们在控制台中看到的:
为什么不一样呢?所有的tr标签和他们的td标签都有信息吗?在
我做错什么了?在
其背后的原因是我们需要使用类似
Selenium
的浏览器仿真器来呈现由javascript
生成的动态内容。 如果我们试图只通过请求请求来请求此数据,我们将无法获得您要查找的td
。我推荐官方的Selenium文档或Youtube教程,一旦你掌握了一些东西,它很容易使用。在Selenium Documentation
这不起作用,它只返回不包含您要查找的信息的HTML的一部分(即表元素)
表的内容是通过JavaScript动态生成的。这就是页面源没有它们的原因。
requests
模块在不执行JavaScript的情况下获取页面源代码,这就是为什么您看到不完整的数据。在如果选中dev tools中
Network
选项卡下的XHR
选项卡,则会向http://baloncestoenvivo.feb.es/api/KeyFacts/1881578发送一个请求,该请求将以JSON的形式返回数据。您可以使用requests
模块及其内置的.json()
函数解析此数据。在唯一的问题是,您需要传递以下标题。如果没有它们,网站将阻止脚本,您将看到
requests.exceptions.ConnectionError
。在现在可以从} 模块。在
data
变量获取所有表值。要查看其结构,请使用^{例如,要获取玩家名称和对应的点数,可以使用以下命令:
^{pr2}$输出:
相关问题 更多 >
编程相关推荐