问题背景

一段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请求时告知了对象服务器本地数据支持压缩,但是实际本地未配置压缩相关的包,导致的获取到的请求数据无法正常解压。
本质上是本地环境缺失问题,但是代码编译运行时并不会直接出现报错告知缺失某个库,因此值得注意。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐