Обнаружение ошибки тайм-аута в Python urllib2 urlopen - PullRequest
3 голосов
/ 18 августа 2010

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

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

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

В примечании, если бы соединение оставалось открытымна сервер помогите?

Ответы [ 2 ]

2 голосов
/ 18 августа 2010

В следующий раз, когда произойдет ошибка, обратите внимание на сообщение об ошибке.Последняя строка скажет вам тип исключения.Например, это может быть 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
1 голос
/ 18 августа 2010
...