【问题标题】:Python urllib.request.urlopen on a changing websitePython urllib.request.urlopen 在不断变化的网站上
【发布时间】:2021-09-02 13:38:49
【问题描述】:

对于一个小型应用程序,我想查看我们的本地网站,公共游泳池是否已满员。为此,我尝试使用 urllib 和正则表达式来读取 html 代码并搜索状态。

import urllib
import urllib.request
import re
import time
link = "https://www.brilon.de/kultur-freizeit-tourismus/hallen-und-freibaeder/waldfreibad-gudenhagen/"
page = urllib.request.urlopen(link)
time.sleep(3)
pageFile = page.read()
plainText= pageFile.decode('UTF-8')
line = re.findall("""<div id="lblAlStatus" style="background-color: green;">Zutritt möglich</div>""", plainText)
print (line)

问题是,在很短的时间内,网站只显示“加载状态”而不是“可能进入”或“进入被拒绝”,然后显示实际状态。我试图通过在 urllib.request.urlopen(link) 和实际的 read() 之间添加延迟来解决这个问题,但这并没有按预期工作。

【问题讨论】:

    标签: python web web-scraping screen-scraping urllib


    【解决方案1】:

    状态从请求返回到附加端点,JavaScript 检查响应并转换为您在页面上看到的文本。

    执行请求的函数是fnetAlGetStatus()。映射在文件https://app.briit.de/freibad-ampel/func.js 中提供

    function fnetAlUpdateDsp() {
        var lblAlStatus = document.getElementById("lblAlStatus");
        if (fnetAlStatusOk) {
            if (fnetAlStatus === "A") {
                lblAlStatus.innerHTML = "Zutritt m&ouml;glich";
                lblAlStatus.style = "background-color: green;";
            } 
            if (fnetAlStatus === "S") {
                lblAlStatus.innerHTML = "Aktuell Besucherstopp";
                lblAlStatus.style = "background-color: red;";
            } 
            if (fnetAlStatus === "W") {
                lblAlStatus.innerHTML = "Witterungsbedingt geschlossen";
                lblAlStatus.style = "background-color: violet;";
            } 
        }
    }

    您可以重新创建请求并提供自己的映射以生成输出文本:

    import requests, json
    
    status = {'A':'Zutritt möglich',
              'S':'Aktuell Besucherstopp',
              'W':'Witterungsbedingt geschlossen'}
    
    r = requests.get('https://app.briit.de/freibad-ampel/api.php?op=getStatus')
    print(status[json.loads(r.text)['AlStatus']])
    

    查看 js 似乎还有错误处理以及 '' 将用于错误,即

    status = {'A':'Zutritt möglich',
              'S':'Aktuell Besucherstopp',
              'W':'Witterungsbedingt geschlossen',
              '': 'Error'}
    

    【讨论】:

    • 你是救命稻草
    猜你喜欢
    • 2020-08-25
    • 2023-03-29
    • 2019-02-20
    • 2017-11-28
    • 2018-06-26
    • 2021-04-17
    • 2020-07-29
    • 1970-01-01
    • 2017-04-19
    相关资源
    最近更新 更多