如何获取网站的html文件

时间:2017-01-26 18:21:24

标签: python python-3.x

我正在尝试使用我的网站的HTML,看看它是否与我在离线版本上的相同。

我一直在研究这个,我所能找到的只是解析或只处理http://

的东西

到目前为止,我有这个:

import urllib
url = "https://www.mywebsite.com/"
onlinepage = urllib.urlopen(url)
print(onlinepage.read())
offlinepage = open("offline.txt", "w+")
print(offlinepage.read())

if onlinepage.read() == offlinepage.read():
    print("same") # for debugging
else:
    print("different")

这总是说它们是相同的,即使我完全放入不同的网站。

3 个答案:

答案 0 :(得分:4)

首次使用以下行打印在线和离线页面时:

print(onlinepage.read())
print(offlinepage.read())

...您现在已经消耗了每个文件对象中的所有文本。对任一对象的后续读取将返回空字符串。两个空字符串相等,因此您的if条件将始终评估为True

如果您纯粹使用文件,则可以seek到两个文件的开头并再次阅读。由于seek文件对象上没有urlopen方法,因此您需要使用新的urlopen命令重新获取页面,或者更好地保存原始文件变量中的文本,并用于后续比较:

online = onlinepage.read()
print(online)
offline = offlinepage.read()
print(offline)

...

if online == offline:
    ...

答案 1 :(得分:1)

正如其他人所说,你不能read两次请求对象(如果没有寻求,则不能read两次文件;一旦阅读,您获得的数据将不再可用,因此您需要存储它。

但他们错过了另一个问题:您使用模式w+打开了文件。 w+允许读取和写入,但是,就像模式w一样,它会截断open上的文件。因此,当您阅读本地文件时,您的本地文件始终为空,这意味着您既破坏了本地文件又从未获得匹配(除非在线文件也是空的)。

您需要使用模式r+a+来获取不会截断现有文件的读/写句柄(r+要求该文件已存在,{{1不会,但是将写入位置放在文件的末尾,而在某些系统上,所有的写入都放在文件的末尾。)

因此,修复两个错误,你得到:

a+

答案 2 :(得分:0)

您在每个文件上使用.read()两次。

>>> f.read()
'This is the entire file.\n'
>>> f.read()
''

“如果已到达文件末尾,f.read()将返回一个空字符串("")。” (7.2.1 Docs)。

因此,当比较两个结果时,它们是相等的,因为每个结果都是一个空字符串。