Форум сайта python.su
Сайт http://kinopoisk.ru редиректит адрес сам на себя (т.е. редирект идет на kinopoisk.ru), из зачего крашится мой скрипт. Я не могу открыть страницу.
Вот что я пробывал:
br = mechanize.Browser()
br.set_handle_refresh(False)
br.set_debug_redirects(True)
br.open(url)
opener = urllib2.build_opener(urllib2.HTTPRedirectHandler())
urllib2.install_opener(opener)
site = opener.open(url)
Traceback (most recent call last):P.S. По ходу не в тот раздел запостил :/
File “./kinopoisk.py”, line 31, in <module>
kinopoisk.search('Jumper')
File “./kinopoisk.py”, line 21, in search
site = opener.open(url)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 597, in http_error_302
return self.parent.open(new)
File “/usr/lib/python2.6/urllib2.py”, line 389, in open
response = meth(req, response)
File “/usr/lib/python2.6/urllib2.py”, line 502, in http_response
‘http’, request, response, code, msg, hdrs)
File “/usr/lib/python2.6/urllib2.py”, line 421, in error
result = self._call_chain(*args)
File “/usr/lib/python2.6/urllib2.py”, line 361, in _call_chain
result = func(*args)
File “/usr/lib/python2.6/urllib2.py”, line 587, in http_error_302
self.inf_msg + msg, headers, fp)
urllib2.HTTPError: HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
Found
Отредактировано (Авг. 4, 2009 19:23:36)
Офлайн
А как его тогда браузер открывает, если он сам на себя редиректит ?
Офлайн
В соседней ветке обсуждали 302, там я линку приводит на код, который обрабатывает редирект.
Офлайн
igor.kaist, тот код просто игнорирует редирект. А нужно, чтобы скрипт, наоборот, по нему переходил. Почему urllib2 этого не делает автоматически - не понятно.
Может, кто подскажет как это правильно реализовать?
Офлайн
Насколько я понял, сайт kinopoisk.ru редиректит на www.kinopoisk.ru, попробуй сразу с www. указывать. Проверял браузером, если с urllib он себя не так ведет, то можно попробовать сменить user agent.
Офлайн
Пробовал. С www.kinopoisk.ru редиректит на error.kinopoisk.ru, там пытается установить куку сессии и редиректит обратно на www.kinopoisk.ru.
Фишка в том, что я в настройках Оперы отключал прием кук, отправку личных данных и автоматический редирект. И сайт, все-равно, открывался.
Даже в php, через curl, все работает без лишних телодвижений. А в python'e, urllib2 ни в какую не хочет обрабатывать редирект самостоятельно.
Офлайн
Собственно, все оказалось банально просто. pasaranax, спасибо за подсказку.
Все что нужно, это передать в заголовках user agent. Хоть я и пробовал это раньше, но, видимо, где-то еще допустил ошибку (второй день с питоном работаю).
Если user agent не передавать, то сервер уходит в бесконечный редирект, о чем и сообщает urllib2 (зря грешил на эту библиотеку).
urllib2.HTTPError: HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.Вот рабочий пример:
import urllib2
req = urllib2.Request('http://www.kinopoisk.ru');
req.add_header('User-Agent', 'Opera/9')
f = urllib2.urlopen(req)
print f.read()
Офлайн
Всем добрый день!
С чем может быть связано, что при замене
req.add_header('User-Agent', ‘Opera/9’)на
req.add_header('User-Agent', ‘'Mozilla/5.0’')опять появляется редирект?
Офлайн
Нужно, как не странно, писать
req.add_header('User-Agent', ''Firefox/3.5.8'').
Офлайн
Подскажите пожалуйста http://www.python.su/forum/viewtopic.php?pid=46033#p46033
Офлайн