Обнаружение временного времени в Python Urllib2 urlopen

StackOverflow https://stackoverflow.com/questions/3515087

  •  29-09-2019
  •  | 
  •  

Вопрос

Я все еще относительно новичок в Python, поэтому, если это очевидный вопрос, я прошу прощения.

Мой вопрос относится к библиотеке URLLIB2, и это функция Urlopen. В настоящее время я использую это для загрузки большого количества страниц с другого сервера (все они находятся на одном и том же удаленном хосте), но сценарий время от времени убивается по ошибке тайм -аута (я предполагаю, что это из больших запросов).

Есть ли способ сохранить сценарий после тайм -аута? Я хотел бы иметь возможность получить все страницы, поэтому я хочу сценарий, который будет продолжать пытаться, пока он не получит страницу, а затем не будет двигаться дальше.

С другой стороны, будет ли подключение подключения открытым для сервера?

Это было полезно?

Решение

В следующий раз, когда произойдет ошибка, обратите внимание на сообщение об ошибке. Последняя строка расскажет вам тип исключения. Например, это может быть urllib2.HTTPError. Отказ Как только вы узнаете, какой тип поднятого исключения вы можете поймать его в try...except блокировать. Например:

import urllib2
import time

for url in urls:
    while True:
        try:
            sock=urllib2.urlopen(url)
        except (urllib2.HTTPError, urllib2.URLError) as err:
            # You may want to count how many times you reach here and
            # do something smarter if you fail too many times.
            # If a site is down, pestering it every 10 seconds may not
            # be very fruitful or polite.
            time.sleep(10)
        else:              
            # Success  
            contents=sock.read()
            # process contents
            break                # break out of the while loop

Другие советы

Пропавшее руководство Urllib2 может вам помочь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top