В Python запросы: запросы.исключения.TooManyRedirects: превышено 30 перенаправлений

Я пытался обойти эту страницу с помощью библиотеки python-requests

import requests
from lxml import etree,html

url = 'http://www.amazon.in/b/ref=sa_menu_mobile_elec_all?ie=UTF8&node=976419031'
r = requests.get(url)
tree = etree.HTML(r.text)
print tree

но я получил сообщение об ошибке выше. (TooManyRedirects) Я пытался использовать

3 ответов


Amazon перенаправляет ваш запрос на http://www.amazon.in/b?ie=UTF8&node=976419031, который в свою очередь перенаправляет на http://www.amazon.in/electronics/b?ie=UTF8&node=976419031, после чего вы вошли в цикл:

>>> loc = url
>>> seen = set()
>>> while True:
...     r = requests.get(loc, allow_redirects=False)
...     loc = r.headers['location']
...     if loc in seen: break
...     seen.add(loc)
...     print loc
... 
http://www.amazon.in/b?ie=UTF8&node=976419031
http://www.amazon.in/electronics/b?ie=UTF8&node=976419031
>>> loc
http://www.amazon.in/b?ie=UTF8&node=976419031

таким образом, ваш исходный URL a не перенаправляет новый URL B, который перенаправляет на C, который перенаправляет на B и т. д.

по-видимому, Amazon делает это на основе заголовка User-Agent, и в этот момент он устанавливает cookie, который должны отправлять следующие запросы. Следующие работы:

>>> s = requests.Session()
>>> s.headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'
>>> r = s.get(url)
>>> r
<Response [200]>

это создало сеанс (для удобства повторного использования и для сохранения файлов cookie) и копию строки агента пользователя Chrome. Запрос выполняется успешно (возвращает 200 ответов).


рост max_redirect можно явно указать количество, как в примере ниже:

session = requests.Session()
session.max_redirects = 60
session.get('http://www.amazon.com')

вам нужно скопировать значение cookie в заголовок. С моей стороны это работает.