У меня есть странная проблема, которую я пытался "погуглить" в течение нескольких часов.
Я пробовал также решения из похожих тем в стеке, но все равно безрезультатно:
Как установить файлы cookie с помощью Python urlopen?
Обработка перенаправлений rss с помощью Python/urllib2
Итак, дело в том, что я хочу загрузить весь набор статей с какой-либо веб-страницы. Его подссылки с правильным содержанием отличаются всего одним числом, поэтому я перебираю весь диапазон (от 1 до 400 000) и записываю html в файлы. Что здесь важно, так это то, что эта веб-страница нуждается в повторной отправке файлов cookie, чтобы получить правильный URL-адрес, и после лекции Как использовать Python для входа на веб-страницу и получения файлов cookie для последующего использования? Я это сделал.
Но иногда мой скрипт возвращает ошибку:
response = meth(req, response)
Файл "/usr/lib/python3.1/urllib/request.py", строка 468, в http_response
'http', request, response, code, msg, hdrs )
....
Файл "/usr/lib/python3.1/urllib/request.py", строка 553, в http_error_302 self.inf_msg + msg, headers, fp)
urllib.error.HTTPError: Ошибка HTTP 302: HTTP-сервер вернул ошибку перенаправления, которая привела бы к бесконечному циклу.
Последнее сообщение об ошибке 30x:
< strong>Найдено
Эту проблему трудно воспроизвести, потому что сценарий обычно работает нормально, но это происходит случайным образом после нескольких тысяч циклов for.
Вот вывод curl с сервера:$ curl -I "http://my.url/"
HTTP/1.1 200 OK
Date: Wed, 17 Oct 2012 10:14:13 GMT
Server: Apache/2.2.15 (Oracle)
X-Powered-By: PHP/5.3.3
Set-Cookie: Kuuxk=ae7s3isu2cEshhijte4nb1clk5; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=UTF-8
Некоторые люди предлагали использовать механизм или попытаться поймать исключение, но я понятия не имею, как это сделать, другие сказали, что ошибка вызвана неправильной обработкой файлов cookie, но я также пытался получить и отправить файлы cookie «вручную», используя urllib2 и add_header('cookie', cookie)
с аналогичным результатом . Интересно, может ли мой цикл for
и, возможно, короткий сон привести к сбою сценария несколько раз..
Anwyay - любая помощь приветствуется.
edit:
В случае, если это может сработать - как поймать исключение и попытаться его игнорировать?
редактировать:
Решается простым игнорированием этой ошибки. Нет, все идет нормально.
Я использовал
try: #here open url except any_HTTPError: pass
Каждый раз, когда я использую инструкцию url.open.
БЫТЬ ЗАКРЫТЫМ.