You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy脚本本地运行正常,Ubuntu服务器返回无法识别的乱码响应

Scrapy 服务器返回乱码问题解决

这个现象是典型的响应压缩格式未被正确解压导致的,本地环境预装了对应依赖可以正常解压,服务器环境缺失依赖/配置错误就会直接返回原始二进制压缩内容,按以下步骤排查修复:

1. 确认响应压缩类型

在解析函数中打印响应头的编码标识,确认压缩格式:

def parse(self, response):
    # 输出内容大概率是 gzip、deflate、br 其中一种
    print(response.headers.get("Content-Encoding", b"").decode())

2. 对应修复方案

  • 缺失解压依赖:如果输出是br(Brotli压缩),需要在服务器环境安装对应依赖:
    pip install brotli
    
  • 手动指定解压:如果不想安装额外依赖,也可以手动对响应体解压后再解析:
    import gzip
    from io import BytesIO
    
    def parse(self, response):
        # 示例为gzip格式解压,Brotli格式对应使用brotli.decompress方法
        content = gzip.GzipFile(fileobj=BytesIO(response.body)).read()
        print(content.decode("utf-8"))
    
  • 禁用压缩请求:在请求头中指定不接受压缩内容,让服务器直接返回明文:
    yield scrapy.Request(
        url=目标链接,
        headers={"Accept-Encoding": "identity"}
    )
    

3. 配置排查

如果以上方案无效,检查项目settings.py中是否禁用了默认的压缩解压中间件,确保以下配置存在且未被注释:

DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590,
}

内容的提问来源于stack exchange,提问作者Aiisc Sunday

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:27:06