【python】requests请求下返回乱码数据、空数据问题修复
·
问题背景
一段python爬虫数据在Anconda环境下运行能够正常获取到爬虫数据,而后改为使用新建的虚拟环境则始终报错数据范围为空。
排查过程
起初怀疑环境安装有漏掉的内容,但是项目并没有报错提示缺少某个库。
经过单步调试排查,最终将问题锁定到request请求下。
resp = requests.get(url, params=params, headers=headers)
print(f"Status: {resp.status_code}")
print(f"Response: {resp.text[:200]}")
该请求返回的数据如下,是一段乱码,且乱码内容和常见的UTF-8在GBK下显示导致的乱码存在一些差异。
Status: 200
Response: ��
��Q�7�2R��’�������e��a"�.�!n���8
4w� ���������g��?pB)xjO��@�1;˻�ӈ-�p|C��
进一步查看requests请求头有配置:
"Accept-Encoding": "gzip, deflate, br, zstd",
由此锁定了问题的原因:
HTTP 响应压缩解压问题。服务器返回的是 gzip 或 br 压缩内容,但虚拟环境中缺少对应的解压库(如 brotli、zstandard),导致 requests 无法自动解压,出现乱码。Anconda环境因为恰巧已安装这些库,所以能正常显示。
解决方案
安装缺失的解压库
pip install brotli zstandard brotlipy
重新运行代码即可正常获取并显示数据。
问题总结
该bug出现原因是request请求时告知了对象服务器本地数据支持压缩,但是实际本地未配置压缩相关的包,导致的获取到的请求数据无法正常解压。
本质上是本地环境缺失问题,但是代码编译运行时并不会直接出现报错告知缺失某个库,因此值得注意。
更多推荐




所有评论(0)