我有一个程序从网站下载页面,查找其中的图片链接并下载这些图片。如果我尝试在具有快速和稳定的互联网连接的计算机上运行此程序 - 一切都可以正常工作数天和数周。但是,如果我在具有缓慢或不稳定的Internet连接的计算机上尝试此程序 - 我有一个问题 - “try-except”模块似乎无法正常工作。
---此功能下载内容 - 任何内容(页面或图片)
def downl(self,addr,cook,head2,errmess):
global result
try:
result=requests.get(addr, cookies=cook, headers=head2)
except:
print(errmess) # error message
time.sleep(5)
return result
我发送到此功能链接到该页面,然后其他功能在该页面中查找picture_link,然后我发送到相同的功能(downl)picture_link。在此之后,我将函数(downl)的结果保存为.jpg文件。正如我所说 - 在具有正常互联网连接的计算机上,一切正常。因此,我的硬盘上有5张,10张或5000张图片。
但是,让我举一些关于互联网连接不良的例子。假设我们每页有2页和1张图片。
step 1) downloading 1st page (def downl)
step 2) taking picture_link from it
step 3) downloading picture (def downl)
step 4) saving 1st picture to hdd 1.jpg
step 5) downloading 2nd page (def downl)
step 6) taking picture_link from it
step 7) downloading picture (def downl) and receivind error message (errmess)
step 8) saving 2nd picture to hdd 2.jpg
仅举例:第一张图片可能是正常的jpg,内容合适。第二张图片将是jpg扩展名的文件,但是会有第二页作为内容(这将是通常的html文件,保存错误的扩展名为“jpg”)
另外一句话:在第二张图片的下载过程中出现了互联网问题,程序打印了一个关于它的错误(错误),但是COUNSTESS的INSTEAD重试(在我的函数中假设)它通过try-except块以某种方式通过并返回上一个结果(第2页),保存为第2张图片。请帮忙!如何使这个尝试 - 除了(或请求)工作FOREVER,UNTILL它下载应该下载的内容(无论互联网连接发生什么错误),而不是通过以前的结果。
非常感谢你的时间和关注。
答案 0 :(得分:1)
然后你需要一个像这样的True循环:
def downl(self,addr,cook,head2,errmess):
global result
while(True):
try:
result=requests.get(addr, cookies=cook, headers=head2)
return result
except:
print(errmess) # error message
time.sleep(5)