我编写了一个脚本,使用urllib.request自动从url列表中下载文件。
for url in addresses:
file_name = url.rsplit('/', 1)[-1]
file = os.path.join(directory, file_name)
urllib.request.urlretrieve(url, file)
print(" %-15s %-10s %25s" % ('--', file_name, 'downloaded'))
有时我得到raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response
并且脚本停止。列表中有100个网址,无论下载什么文件,无论是下载第3个,第25个还是第89个文件,我都会收到该错误。我的意思是我可以得到第n个文件的错误,但是当我再次运行sript时,第n个文件可以正确下载。这是随机的。
该如何解决?
答案 0 :(得分:3)
如果要在失败后继续执行,请使用try
,except
-
for url in addresses:
file_name = url.rsplit('/', 1)[-1]
file = os.path.join(directory, file_name)
try:
urllib.request.urlretrieve(url, file)
print(" %-15s %-10s %25s" % ('--', file_name, 'downloaded'))
print(count, '/', len(addresses))
except RemoteDisconnected:
print("url {} did not return a valid response".format(url))
现在要进一步解决此问题,您可以继续尝试直到URL响应而不会像这样超时-
valid_response = False
while not valid_response:
try:
urllib.request.urlretrieve(url, file)
valid_response = True
except RemoteDisconnected:
pass
这是一种
强力手段,但是会一直尝试直到获得有效的答复为止