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

Python Rpi 0上的Web Scraper仅每3-4分钟捕获一次新数据?,python,web-scraping,beautifulsoup,raspberry-pi-zero,Python,Web Scraping,Beautifulsoup,Raspberry Pi Zero,我使用Beauty Soup 4库编写了一个python web scraper,并在raspberry pi 0上运行它。我从mlb.com//scores获取数据,例如,mlb.com/padres/scores或mlb.com/cubs/scores。当比赛安排、进行中或结束时,这些网站看起来略有不同。我的程序是在游戏进行时使用的 我面临的问题是,当我试图在一个循环中运行程序以在游戏进行过程中不断获取信息时(理想情况下,我的程序会捕捉到每一次投球更新),我的网络刮板无法跟上。似乎web s

我使用Beauty Soup 4库编写了一个python web scraper,并在raspberry pi 0上运行它。我从
mlb.com//scores
获取数据,例如,
mlb.com/padres/scores
mlb.com/cubs/scores
。当比赛安排、进行中或结束时,这些网站看起来略有不同。我的程序是在游戏进行时使用的

我面临的问题是,当我试图在一个循环中运行程序以在游戏进行过程中不断获取信息时(理想情况下,我的程序会捕捉到每一次投球更新),我的网络刮板无法跟上。似乎web scraper每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库是如何工作的。我会同时阅读文档,但希望有人知道我的问题。谢谢

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

# Set the URL you want to webscrape from
url = 'https://www.mlb.com/astros/scores'
while again:
        # Connect to the URL
        uClient = uReq(url)
        page_html = uClient.read()
        uClient.close()
        
        #set html parsing
        page_soup = soup(page_html,"html.parser")
        data = page_soup.find('div',{'data-test-mlb':'singleGameContainer'})

beautifulsoup从HTML中提取信息,但它本身不执行请求。如果您已在驱动器上以html格式保存了网页,并且始终使用beautifulsoup对其进行解析,则该网页将永远不会更新。您必须通过
请求再次获取您的网页。获取
或同等内容

例如:

导入请求
从bs4导入BeautifulSoup
从时间导入睡眠,时间
prev=“”
#设置要从中浏览的URL
url='1〕https://www.mlb.com/astros/scores' 
开始=时间()
尽管如此:
t0=时间()
#连接到URL
r=请求。获取(url)
page_html=r.text
t1=时间()
打印(f“{t1-start:.2f}s{t1-t0:.2f}s”,第html==prev页)
prev=页面\ html
睡眠(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
,这会将输出限制为仅一个结果。我想这是故意的,但如果不是,你可能有你的问题…

从我的理解来看,我正在做你说我需要做的事情,这就是为什么我感到困惑,它不起作用。我试图粘贴带有此注释的代码,但格式不正确。我会尝试编辑我的原始邮件,你能显示一些代码吗?(在你最初的帖子中,不是在评论中)不是全部,而是你如何获得数据并将其传递给BS4。另外,如果你只进行一次迭代,这会很有帮助,这样我们就可以排除这个程序只是懒散,我以前从未在这里发布过。我编辑了原文。我能看出时间问题的唯一方法是,如果web请求不是连续的,这意味着一旦我进行了调用,程序将继续并打印它收集的数据。当循环程序时,它将打印,并需要大约10秒再次打印,通常是相同的数据。我在github上有这个程序,如果这对你来说比我解释容易的话。今晚我将尝试在几个不同的机器上运行它,看看这个问题在不同的平台上是否仍然存在。我应该早点试试这个。我将在我的帖子中添加更多内容,希望能让我的问题更清楚。看到你的例子后,我认为树莓皮可能是罪魁祸首。使用find there是有意的。如果您访问mlb.com/team name/scores,那么url中的球队将始终是第一个游戏容器。我只是想知道一个特定球队的比赛信息。可能会在我为一个团队工作后收集所有游戏的信息。谢谢你!我在桌面上运行了我的程序。我的rpi上的刮板和我的桌面上的刮板看到相同的东西。它们提取的html是相同的。但是,当我在浏览器中打开网页时,html是不同的。我不知道这是什么原因。有什么想法吗?编辑:我认为Javascript是引起我头痛的原因。听起来好像是在更新网页而不是源代码?在不同平台上运行我的程序后,问题仍然存在。网络爬虫也看到了同样的情况。它们获取相同的html。但是,打开网页的浏览器会看到不同的html。因此,我现在的问题是,是什么导致web scraper看到与浏览器不同的html?