Форум сайта python.su
Доброго времени суток. Есть скрипт, парсит некие данные с сайта в цикле. Дело в том, что иногда, после некоторого времени работы скрипта, он падает с ошибкой:
TimeoutError: [WinError 10060] Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера
try: site = urllib.request.urlopen('http://www.google.ru').read() except urllib.URLError: print("TimeOut...Sleep") time.sleep(10) continue
Офлайн
while True: try: f() break except TimeoutError: sleep(10)
Отредактировано py.user.next (Март 29, 2015 13:27:54)
Офлайн
Исправил:
while True: try: site = urllib.request.urlopen('http://www.google.ru').read() except TimeoutError: print("TimeOut...Sleep") time.sleep(10) pass
Офлайн
IRiotКопируй точно.
Исправил:
Отредактировано py.user.next (Март 29, 2015 13:51:13)
Офлайн
Не могу сообразить, не разбирался еще с with-as. Не могли бы вы объяснить? Если вас конечно не затруднит.
Офлайн
import urllib.request import time def load(url): with urllib.request.urlopen(url) as data: charset = data.headers.get_charsets()[0] text = data.read().decode(charset or 'latin1') return text def load_with_time(url, timeout): text = None while True: try: text = load(url) break except TimeoutError: time.sleep(timeout) return text load_with_time('http://www.google.ru', 5000)
Отредактировано py.user.next (Март 30, 2015 00:29:41)
Офлайн
py.user.next
Отредактировано unza (Июль 26, 2017 23:21:01)
Офлайн
unzaПоставь третий питон
пробую ваш пример, выдает:
NameError: global name ‘TimeoutError’ is not defined
>>> TimeoutError <class 'TimeoutError'> >>>
unzaСкорее всего, можно. Это второй питон, там надо копаться, чтобы понять, как.
можно его переделать с ипользованием библиотеки urllib2?
Отредактировано py.user.next (Июль 26, 2017 23:49:31)
Офлайн
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) - не работает, хотя по описанию там можно передавать данные.
Отредактировано unza (Июль 27, 2017 21:17:22)
Офлайн
req = urllib.request.Request(url, headers={'User-Agent': 'Firefox'}) data = urllib.request.urlopen(req)
Офлайн