Rpi 0上的Web Scraper仅每3-4分钟获取一次新数据?

问题描述

我使用Beautiful Soup 4库编写了python网络抓取工具,并在树莓派0上运行它。我从mlb.com/<insert a team name>/scores抓取数据,例如mlb.com/padres/scores或{{1} }。在计划,进行或结束游戏时,这些站点看起来略有不同。我的程序适用于游戏进行中的时间。

我面临的问题是,当我尝试以循环方式运行该程序以随着游戏的进行不断获取信息时(理想情况下,我的程序将捕获每个音高更新),但是我的网络抓取工具无法跟上。似乎网络抓取工具每3-4分钟抓取一次HTML,然后,如果我继续运行它,它将从某个地方的缓存中获取数据。刷新桌面上的页面时,可以看到页面已更新。但是,当程序在我的Raspberry pi 0上运行时,大约3-4分钟内看不到页面更新。

例如,当我在rpi上运行脚本时,它将捕获游戏中的一刻。 2球,1球,2球等。在我的桌面浏览器上查看时,游戏将继续并且网页也会更新。 2出2球2球..... 2出3球2球...等等。但是如果我继续在rpi上运行脚本,它将仍然看到/显示2出1球2球。与我在桌面上看到的不匹配。然后大约3-4分钟后,我的rpi将更新,并再次与我在台式机上看到的匹配。

如有必要,我可以发布代码,但是由于缺乏对BS4库工作原理的了解,我倾向于这样做。同时,我将通读文档,但希望有人知道我的问题。谢谢!

mlb.com/cubs/scores

https://github.com/MattNemeth/led-cle-indians

解决方法

beautifulsoup从HTML提取信息,但是它本身并不执行请求。如果您已将HTML网页保存在驱动器上,并且始终使用beautifulsoup对其进行解析,则该网页永远不会更新。您必须使用requests.get或同等水平来重新获得网页。

示例:

import requests 
from bs4 import BeautifulSoup 
from time import sleep,time 

prev = "" 
# Set the URL you want to webscrape from 
url = 'https://www.mlb.com/astros/scores' 
start = time() 
while True: 
    t0 = time() 
    # Connect to the URL 
    r = requests.get(url) 
    page_html = r.text 

    t1 = time() 
    print(f"{t1 - start:.2f}s {t1-t0:.2f}s",page_html == prev) 
    prev = page_html 
    sleep(10) 

上面的代码为我提供了以下输出:

0.15s 0.15s False
10.38s 0.22s True
20.56s 0.17s True
32.41s 1.83s True
42.57s 0.16s True
52.74s 0.16s True
62.90s 0.15s True
73.08s 0.17s True
83.25s 0.16s True
93.41s 0.15s True
103.57s 0.15s True
115.13s 1.55s False
125.29s 0.16s True
135.46s 0.16s True
145.63s 0.16s True
155.81s 0.17s True
166.07s 0.26s True

因此网页正在正确更新

虽然可能是错误的来源,但是您使用BeautifulSoup.find here会将输出限制为一个结果。我想这是故意的,但如果没有,那么您可能会遇到问题...

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...