我构建了此功能来告诉我网站是否已更改。我不确定它是否可以正常工作,因为我已经在一些未更改的网站上尝试过,并且给了我错误的输出。问题在哪里,根本就没有问题吗? 这是代码:
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)
答案 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。如果已更改,则会中断循环,并仅显示该站点已更改的行。