Python requests组件BUG解决:Max retries exceeded with

如果大家使用Python来写爬虫的时候,都会使用到requests组件。这个组件是Python调用其他地址最好用的组件之一。

但是今天在Python的web项目中遇到了HTTPConnectionPool(host:XX)Max retries exceeded with url 的BUG。

BUG代码如下:

result_data = requests.get(tiantian_url, headers=headers)

下面我们就来说说,该BUG的解决方式:

1.requests组件的版本太落后,需要更新组件 sudo pip install --upgrade requests

2.在requests调用url的过程中,其连接状态是保持着keep-alive持续连接状态的。所以如果频繁调用,系统就会报Max retries exceeded with,这时我们就需要来关闭该连接。

本人直接提供最好的关闭方式。

 headers = {
        'Connection': 'close',
    }
 s = requests.Session()

 tiantian_data = None
 with requests.Session() as s:
     result_data = s.get(tiantian_url, headers=headers)
     tiantian_data = ast.literal_eval(result_data.text)
 print(tiantian_data)

以上就是该问题的解决方式。

 

补充,如果大家在用Python写web项目的时候,需要请求别人的接口,最好使用aiohttp模块。

因为aiohttp模块是异步的,可以更好的实现web的场景,以下是我针对上面的request模块重新编写的代码,亲测可用。

import aiohttp

async def fetch_async(url, headers=None):
    async with aiohttp.ClientSession(headers=headers) as session: #协程嵌套,只需要处理最外层协程即可fetch_async
        async with session.get(url, timeout=2) as resp:
            result = await resp.text()
            return result
    try:
        result_data = await fetch_async(tiantian_url)
        tiantian_data = ast.literal_eval(result_data)
        print(tiantian_data)
    except Exception as e:
        print("error:" + str(e))
        traceback.print_exc()

 

还有值得一提的就是ast模块,

data_json = ast.literal_eval(data)

这种方法可以把数据很方便处理成json型(结构化型)

如果大家有兴趣,可以看我的这篇文章。

https://blog.csdn.net/weixin_38040473/article/details/82108363

 

你可能感兴趣的:(python)