我正在尝试学习使用 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 表中,但代码没有提供。如何确保表已加载数据并首先获取数据?
请您参考如下方法:
抱歉,我无法打开链接。但该表可能是通过以下两种方式之一生成的:
- 完全通过 JavaScript,没有 AJAX 调用。
- 使用 AJAX 调用和一些 JavaScript 进行 DOM 操作。
如果是第一种情况,那么你别无选择,只能使用selenium-webdriver in Python。 .另外,您可以查看此 answer 中的示例.
如果是第二种情况,那么你可以找出URL和发送的数据,然后使用requests模块发送一个类似的请求来获取数据。数据可以是 JSON 格式或 HTML(取决于开发人员的水平)。您必须相应地解析它。
有时,AJAX 调用可能需要 CSRF token 或 cookie 作为数据,在这种情况下,您将不得不恢复到第一种情况下的解决方案。
