Обнаружение временного времени в Python Urllib2 urlopen
Вопрос
Я все еще относительно новичок в 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 может вам помочь