IRiot
Март 29, 2015 13:06:09
Доброго времени суток. Есть скрипт, парсит некие данные с сайта в цикле. Дело в том, что иногда, после некоторого времени работы скрипта, он падает с ошибкой:
TimeoutError: [WinError 10060] Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера
Открываю сайт через urllib.request.urlopen. Как можно это исправить, что бы скрипт при возникновении ошибки не падал, а засыпал на несколько секунд и пробовал заново подключится? Знаю, что нужно использовать try, попробовал так, не вышло:
try:
site = urllib.request.urlopen('http://www.google.ru').read()
except urllib.URLError:
print("TimeOut...Sleep")
time.sleep(10)
continue
IRiot
Март 29, 2015 13:41:17
Исправил:
while True:
try:
site = urllib.request.urlopen('http://www.google.ru').read()
except TimeoutError:
print("TimeOut...Sleep")
time.sleep(10)
pass
Вываливается с такой же ошибкой.
py.user.next
Март 29, 2015 13:49:29
IRiot
Исправил:
Копируй точно.
Я тебе специально не стал вписывать этот urlopen(), потому что ты его неправильно используешь. Там нужно делать with и read() отсоединить в отдельный оператор.
IRiot
Март 29, 2015 19:08:04
Не могу сообразить, не разбирался еще с with-as. Не могли бы вы объяснить?
Если вас конечно не затруднит.
unza
Июль 26, 2017 23:20:31
py.user.next
пробую ваш пример, выдает:
NameError: global name ‘TimeoutError’ is not definedНо это еще не все, можно его переделать с ипользованием библиотеки
urllib2?
py.user.next
Июль 26, 2017 23:47:38
unza
пробую ваш пример, выдает:
NameError: global name ‘TimeoutError’ is not defined
Поставь третий питон
>>> TimeoutError
<class 'TimeoutError'>
>>>
unza
можно его переделать с ипользованием библиотеки urllib2?
Скорее всего, можно. Это второй питон, там надо копаться, чтобы понять, как.
unza
Июль 27, 2017 21:16:28
py.user.next спасибо, ошибки связанной с этой переменной более не возникает.
подскажите, а как в эту конструкцию добавить передачу хедера, например:
head = {'User-Agent': ‘Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11’,
‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8’,
‘Accept-Charset’: ‘ISO-8859-1,utf-8;q=0.7,*;q=0.3’,
‘Accept-Encoding’: ‘none’,
‘Accept-Language’: ‘en-US,en;q=0.8’,
‘Connection’: ‘keep-alive’}
иначе сервер отдает 403ю ошибку на запрос, видно ему не нравится питоновский заголовок.
пробовал всунуть в запрос
urllib.request.urlopen(url) в виде urllib.request.urlopen(url, head) - не работает, хотя по описанию там можно передавать данные.