【问题标题】:How do i understand whether i am parsing the websites acurately?我如何了解我是否准确地解析了网站?
【发布时间】:2018-08-15 17:39:33
【问题描述】:

我建立了这个功能来告诉我网站是否发生了变化。我不确定它是否有效,因为我在几个没有改变的网站上尝试过它,它给了我错误的输出。问题出在哪里,是否存在问题? 这是代码:

我将代码放入一个函数中,这样我就可以允许用户输入任何站点

userurl=input("Please enter a valid url")
def checksite(userurl):
    change=False
    import time

    import urllib.request

    import io

    u = urllib.request.urlopen(userurl)

    webContent1 = u.read()

    time.sleep(60)

    u = urllib.request.urlopen(userurl)

    webContent2 = u.read()

    if webContent1 == webContent2:
        print("Everything is normal")
    elif webContent1 !=webContent2:
        print("Warning, there has been a change to the webite!")
        change=True

    return change
checksite(userurl)

【问题讨论】:

  • 你检查webContent1webContent2的内容了吗?也许它们包含显示内容的时间,因此存在差异......
  • 我可以确认https://www.google.com 将为您提供不同长度的内容。也许尝试一些您确定是静态/不变的网站。例如example.com

标签: python python-3.x parsing webpage urllib


【解决方案1】:

尝试制作一个小的 HTML Hello World 页面。鉴于许多网站的动态内容在您每次访问时都会发生变化(并且可能不一定是可见的),这可能会导致您的结果“不正确”。

【讨论】:

    【解决方案2】:

    我已经测试了您的代码,它在 Python 网络服务器中运行良好。

    我已经开始了 python -m http.server

    并在启动服务器之前将 index.html 与一些内容放在同一目录中。

    和你的代码

    import time
    import urllib.request
    import io
    
    userurl='http://localhost:8000/index.html'
    
    def checksite(userurl):
        change=False
        u = urllib.request.urlopen(userurl)
    
        webContent1 = u.read()
        print(webContent1)
    
        time.sleep(15)
    
        u = urllib.request.urlopen(userurl)
        webContent2 = u.read()
        print(webContent2)
        if webContent1 == webContent2:
            print("Everything is normal")
        elif webContent1 !=webContent2:
            print("Warning, there has been a change to the webite!")
            change=True
        return change
    
    checksite(userurl)
    

    和输出

    b'<html>\n\t<title> Hello </title>\n\t<body>\n\t\tTesting, Webcontent1 \n\t</body>\n\t</html>\n\n'
    b'<html>\n\t<title> Hello </title>\n\t<body>\n\t\tTesting, Webcontent2\n\t</body>\n\t</html>\n\n'
    Warning, there has been a change to the webite!
    [Finished in 17.5s]
    

    您的代码非常好。

    【讨论】:

      【解决方案3】:

      要知道网站或页面是否已更改,您需要在某处对其进行备份,在您的代码中,就像您将网站与自身进行比较......无论如何。除了 BS4 之外,我建议使用 requests 库,并尝试逐行解析它,并与您拥有的备份进行比较。

      因此,当代码运行时(又名:您作为备份的站点显示与网络上的站点相同的行),它将具有一个变量 true。如果它发生了变化,它会中断循环并简单地显示站点发生变化的那一行。

      【讨论】:

      • 好的,我会尝试使用动态网站
      猜你喜欢
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 2022-10-17
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多