我如何理解我是否正在正确地解析网站?

时间:2018-08-15 17:39:33

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

我构建了此功能来告诉我网站是否已更改。我不确定它是否可以正常工作,因为我已经在一些未更改的网站上尝试过,并且给了我错误的输出。问题在哪里,根本就没有问题吗? 这是代码:

我将代码放入函数中,以便可以允许用户输入任何站点

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)

3 个答案:

答案 0 :(得分:1)

尝试制作一个小的HTML Hello World页面。鉴于许多网站都有动态内容,每次您访问它时都会更改(并且不一定是可见的),所以这可能导致您的“错误”结果。

答案 1 :(得分:1)

我已经测试了您的代码,并且在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]

您的代码非常好。

答案 2 :(得分:0)

要知道网站或页面是否已更改,您需要在某个地方进行备份,在您的代码中,就像您一直在将网站与其自身进行比较一样。我建议使用除BS4之外的请求库,并尝试与您的备份进行逐行解析。

因此,当代码正常工作时(又称:您拥有备份的网站显示的行与网络上的行相同),它将具有变量true。如果已更改,则会中断循环,并仅显示该站点已更改的行。