【问题标题】:Python TooManyRedirects: Exceeded 30 redirectsPython TooManyRedirects:超过 30 个重定向
【发布时间】:2017-07-03 10:08:55
【问题描述】:

我在 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.

任何帮助将不胜感激

【问题讨论】:

    标签: python python-3.x python-requests


    【解决方案1】:

    Requests\sessions.py

    改变self.max_redirects的值

    你很高兴..

    【讨论】:

    • 不起作用,我尝试更改为 100 左右仍然出现错误。如果我们设置为 1,000 有什么区别?它会做些什么吗?
    【解决方案2】:

    有时,如果您不包含服务器期望的标头,则可能会发生这种情况。如果您使用 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)
    

    【讨论】:

    • 你能解释一下/举个例子我如何模仿标头、有效负载等
    • 当然,添加示例。
    • 这节省了我的时间,谢谢,对于那些想添加哪些标头的人只需使用浏览器或 httpie 之类的东西发出请求,检查请求标头,然后像上面的示例中那样复制它们跨度>
    【解决方案3】:

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

    为了避免永远不会退出 requests 调用,在进程中止之前允许重定向的数量实施了限制。

    我认为您尝试请求某些内容的站点存在错误,可能是循环重定向。

    您可以调整requests 库以不遵循重定向而是返回它们,那么您将不会收到此错误(当然是重定向响应):

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

    【讨论】:

    • 我已尝试使用此信息,在这种情况下没有错误,但我尝试废弃的页面未加载到变量中。有没有办法避免这个错误,但也有在 python 中加载页面?
    • @Andrei 100% 正确,我也有同样的情况。没有可抓取的数据
    猜你喜欢
    • 1970-01-01
    • 2014-07-02
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2013-11-25
    相关资源
    最近更新 更多