Rpi 0上的Web刮板每34分钟只抓取一次新数据?

2024-04-28 23:15:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Beauty Soup 4库编写了一个python web scraper,并在raspberry pi 0上运行它。我从mlb.com/<insert a team name>/scores获取数据,例如mlb.com/padres/scoresmlb.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'})

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


Tags: from程序comweb游戏htmlpage页面
1条回答
网友
1楼 · 发布于 2024-04-28 23:15:47

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.findhere,这会将输出限制为仅一个结果。我猜这是故意的,但如果不是,你可能有你的问题就在那里

相关问题 更多 >