首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rpi 0上的Web Scraper每3-4分钟才抓取一次新数据?

Rpi 0上的Web Scraper每3-4分钟才抓取一次新数据?
EN

Stack Overflow用户
提问于 2020-09-08 22:11:30
回答 1查看 130关注 0票数 0

我使用Beautiful Soup4库编写了一个python网络爬行器,并在树莓派0上运行它。我正在从mlb.com/<insert a team name>/scores抓取数据,例如,mlb.com/padres/scoresmlb.com/cubs/scores。当游戏被安排好、正在进行或已经结束时,这些网站看起来略有不同。我的程序是在游戏进行的时候使用的。

我面临的问题是,当我试图在循环中运行程序,随着游戏的进展不断获取信息时(理想情况下,我的程序会捕捉到每一次投球更新),我的网络刮板没有跟上。似乎web刮板每3-4分钟抓取一次HTML,如果我继续运行它,它会从某个缓存中获取数据。当我刷新桌面上的页面时,我可以看到页面已经更新。但是当程序在我的Raspberry pi 0上运行时,它在大约3-4分钟内看不到页面的更新。

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

如果需要,我可以发布代码,但我倾向于这样做,因为我对BS4库的工作原理缺乏了解。在此期间,我将通读文档,但希望有人知道我的问题。谢谢!

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2020-09-08 22:19:04

漂亮的汤从HTML中提取信息,但它本身并不执行请求。如果你在你的硬盘上保存了一个html格式的网页,并且总是用漂亮的汤来解析它,那么它永远不会更新。你必须用requests.get或类似的语言重新获取你的网页。

示例:

代码语言:javascript
复制
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) 

上面的代码给出了以下输出:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63795752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档