我正在尝试学习使用python进行数据抓取,并且一直在使用Requests和BeautifulSoup4库。它适用于普通网站。但是当我试图从一些延迟加载表数据的网站获取一些数据时,我发现我得到了一个空表。例如this webpage
我试过的剧本是相当常规的。在
import requests
from bs4 import BeautifulSoup
response = requests.get("http://www.oddsportal.com/soccer/england/premier-league/everton-arsenal-tnWxil2o#over-under;2")
soup = BeautifulSoup(response.text, "html.parser")
content = soup.find('div', {'id': 'odds-data-portal'})
数据加载到页面中的表odds-data-portal
中,但是代码没有给出这个值。如何确保表已加载数据并先获取它?在
您需要使用类似于
selenium
的方法来获取html。但您可以继续使用BeautifulSoup
对其进行如下解析:这将显示:
^{pr2}$更新-正如@JRodDynamite建议的那样,运行无头
PhantomJS
可以代替Firefox
。为此:下载PhantomJS Windows binary。
提取
phantomjs.exe
可执行文件并确保它在您的路径中。更改以下行:
browser = webdriver.PhantomJS()
抱歉,我无法打开链接。但该表可能是通过以下两种方式之一生成的:
如果是第一种情况,那么您别无选择,只能使用selenium-webdriver in Python。另外,您可以看看这个answer中的示例。在
如果是第二种情况,那么可以找到URL和发送的数据,然后使用
requests
模块发送一个类似的请求来获取数据。数据可以是JSON格式或HTML格式(取决于开发人员的能力)。你必须相应地分析它。在有时,AJAX调用可能需要CSRF令牌或cookie作为数据,在这种情况下,您必须返回到第一种情况下的解决方案。在
相关问题 更多 >
编程相关推荐