http.client.RemoteDisconnected для случайных файлов из списка URL

1

Я написал сценарий для автоматической загрузки файлов из списка URL-адресов, используя urllib.request.

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 URL-адресов, и я могу получить эту ошибку при загрузке 3-го, 25-го или 89-й файл. Я имею в виду, что я могу получить эту ошибку для n-го файла, но когда я снова запустил свой скрипт, n-й файл можно было загрузить правильно.

Как это исправить?

Теги:

1 ответ

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

Это своего рода грубая сила, но будет пытаться до тех пор, пока вы не получите действительный ответ

  • 0
    большое спасибо! теперь работает нормально! не по теме: почему загрузка оооочень медленная? это urllib или что-то еще?
  • 0
    Вероятно, ваш интернет?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню