http.client.RemoteDisconnected从URL列表中随机获取文件

时间:2018-08-30 07:01:51

标签: python

我编写了一个脚本,使用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个文件可以正确下载。这是随机的。

该如何解决?

1 个答案:

答案 0 :(得分:3)

如果要在失败后继续执行,请使用tryexcept-

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

这是一种
强力手段,但是会一直尝试直到获得有效的答复为止