[英]Scraping data from website that refreshes every 10 minutes in python
[英]Selenium Python Pull Data from Dynamic Table that refreshes every 5 seconds
我正在尝试从每 5 秒刷新一次的实时表/仪表板中提取数据。 因为它每 5 秒刷新一次,所以它给了我不完整的记录[我认为从第 1 行开始直到它刷新]。 有没有办法解决这个问题,我可以禁用自动刷新一段时间,可能是 15 秒?
您可以使用请求并获取页面,然后数据就完整了。
import requests
import time
while True:
url = "insert url here"
page = requests.get(url)
# Parse data
time.sleep(5)
从评论中,您有几种方法。 由于您无法分享您的网站,我能做的最好的事情就是描述您需要做什么以及我如何让您的等效网站正常工作。
这两种方法都使用http://www.emojitracker.com/作为示例站点。
方法 1 - 在网络层获取数据:
对于提供的示例站点,我可以看到我有一个名为rankings
的条目,如下所示:
HEADERS
选项卡描述了您需要的数据。 对于这个站点,没有身份验证,没有什么特别的,我不需要发送任何有效负载。 这只是需要的 API 和方法:
Request URL: http://www.emojitracker.com/api/rankings
Request Method: GET
把它扔进pyhton再简单不过了:
import requests
response = requests.get("http://www.emojitracker.com/api/rankings")
data = response.json()
for line in data:
print(line['id'])
print(line['score'])
这会从 json 响应中打印出分数和 ID。 这是我们调试时的样子:
方法 2 - 破解 javascript
准备好后 - 转到控制台选项卡并键入this.stop()
。 在您提供的站点上,这会停止更新调用。
这应该会给你足够的时间来获取你的数据。
从这里开始,您有两种选择可以让您的数据再次运行。
driver.refresh()
查看 JS,它在何处暂停(从上面的步骤中),以及我发现的一些尝试和错误:
this.startRawScoreStreaming()
它做这个输出
application.js:90 Subscribing to score stream (raw)
ƒ (event) {
return incrementScore(event.data);
}
页面再次开始流式传输。
最后,要在 selenium 中运行这些 JS 片段 - 您使用.execute_script
driver.execute_script('this.stop()')
## do your stuff
driver.execute_script('this.startRawScoreStreaming()')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.