У меня есть код соскабливания в цикле for
, но это займет несколько часов, и программа остановится, когда мое интернет-соединение сломается. То, что мне (думаю, мне) нужно, является условием в начале скребка, который говорит Python продолжать попытки в этом пункте. Я пытался использовать ответ от here:Как заставить сценарий ждать в течение итерации до тех пор, пока соединение Интернета не будет восстановлено?
for w in wordlist:
#some text processing, works fine, returns 'textresult'
if textresult == '___': #if there's nothing in the offline resources
bufferlist = list()
str1=str()
mlist=list() # I use these in scraping
br = mechanize.Browser()
tried=0
while True:
try:
br.open("http://the_site_to_scrape/")
# scraping, with several ifs. Each 'for w' iteration results with scrape_result string.
except (mechanize.HTTPError, mechanize.URLError) as e:
tried += 1
if isinstance(e,mechanize.HTTPError):
print e.code
else:
print e.reason.args
if tried > 4:
exit()
time.sleep(120)
continue
break
Работы в то время как я в сети. Когда соединение ломается, Python записывает код 403 и пропускает это слово с wordlist
, переходит к следующему и делает то же самое. Как я могу сказать Python ждать соединения в рамках итерации?
EDIT: Я был бы признателен, если бы вы могли написать хотя бы некоторые из необходимых команд и сообщить мне, где их следует поместить в мой код, потому что я никогда не сталкивался с циклами исключения.
EDIT - SOLUTION Я применил модифицированное решение Abhishek Jebaraj. Я просто добавил очень простую команду обработки исключений:
except:
print "connection interrupted"
time.sleep(30)
Кроме того, команда Получить код Jebaraj будет поднимать ошибку. Перед r.getcode, я использовал это:
import urllib
r = urllib.urlopen("http: the site ")
Верхний ответ this question помог мне, как хорошо.
Проверьте 'статуса/10! = 20', и держать повтор цикл. Просто поместите все в цикл for в цикл while (retry) и измените значение повтора на «False» для статуса 2xx – ishaan