Python TooManyRedirects:超过30个重定向

2024-05-02 05:36:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python中尝试了以下代码

url="http://www.realtor.com/realestateandhomes-search/Pittsburgh_PA/type-single-family-home/price-na-30000/sby-1/"
r=requests.get(url)

但它会引发情欲

  File "C:\Users\Dana\AppData\Local\Programs\Python\Python35-32\lib\site-package
s\requests\sessions.py", line 630, in send
    history = [resp for resp in gen] if allow_redirects else []
  File "C:\Users\Dana\AppData\Local\Programs\Python\Python35-32\lib\site-package
s\requests\sessions.py", line 630, in <listcomp>
    history = [resp for resp in gen] if allow_redirects else []
  File "C:\Users\Dana\AppData\Local\Programs\Python\Python35-32\lib\site-package
s\requests\sessions.py", line 111, in resolve_redirects
    raise TooManyRedirects('Exceeded %s redirects.' % self.max_redirects, respon
se=resp)
requests.exceptions.TooManyRedirects: Exceeded 30 redirects.

如有任何帮助,将不胜感激


Tags: inpackageliblocalsiterequestsrespusers
2条回答

这仅仅意味着你的请求得到了一个重定向的响应(你试图访问的页面现在位于一个新的位置)。requests库在默认情况下理解这一点,并且不返回此结果,而是尝试对新位置执行另一个请求。再次返回重定向等

为了避免永远不从requests调用中出来,在中止进程之前,对允许的重定向次数有一个限制。

我假设您试图请求的站点上有错误,可能是循环重定向。

您可以调整requests库,使其不遵循重定向,而是返回重定向,这样就不会得到此错误(当然是重定向响应):

response = requests.get(url, allow_redirects=False)

如果不包含服务器所期望的头,则偶尔会发生这种情况。如果使用requests.get()中提供的附加选项模拟头、负载、用户代理等,则不太可能出现此错误。

示例:

import requests

headers = {
    'Accept-Encoding': 'gzip, deflate, sdch',
    'Accept-Language': 'en-US,en;q=0.8',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Cache-Control': 'max-age=0',
    'Connection': 'keep-alive',
}

requests.get('http://www.realtor.com/realestateandhomes-search/Pittsburgh_PA/type-single-family-home/price-na-30000/sby-1', headers=headers)

相关问题 更多 >