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

无法在Zyte云部署Scrapy爬虫:AttributeError错误

Scrapy爬虫部署Zyte云失败排查与解决

问题描述

本地运行正常的Scrapy爬虫,部署到Zyte云时失败,核心报错如下:

警告: Setuptools正在替换distutils。
打包版本1.0
部署到Scrapy Cloud项目"615653"
部署日志最后30行:

部署日志位置: C:\Users\hp\AppData\Local\Temp\shub_deploy_4a5i8o6z.log

    错误: 部署失败: b'{"status": "error", "message": "Internal error"}'
      文件 "/usr/local/lib/python3.8/site-packages/sh_scrapy/crawl.py", 第148行, 在_run_usercode中
        _run(args, settings)
      文件 "/usr/local/lib/python3.8/site-packages/sh_scrapy/crawl.py", 第103行, 在_run中
        _run_scrapy(args, settings)
      文件 "/usr/local/lib/python3.8/site-packages/sh_scrapy/crawl.py", 第111行, 在_run_scrapy中
        execute(settings=settings)
      文件 "/app/python/lib/python3.8/site-packages/scrapy/cmdline.py", 第149行, 在execute中
        cmd.add_options(parser)
      文件 "/usr/local/lib/python3.8/site-packages/sh_scrapy/commands/shub_image_info.py", 第23行, 在add_options中
        parser.add_option("--debug", action="store_true",
    AttributeError: 'ScrapyArgumentParser'对象没有属性'add_option'
    回溯(最近的调用最后):
      文件 "/usr/local/bin/shub-image-info", 第8行, 在<module>中
        sys.exit(shub_image_info())
      文件 "/usr/local/lib/python3.8/site-packages/sh_scrapy/crawl.py", 第209行, 在shub_image_info中
        _run_usercode(None, ['scrapy', 'shub_image_info'] + sys.argv[1:],
      文件 "/usr/local/lib/python3.8/site-packages/sh_scrapy/crawl.py", 第148行, 在_run_usercode中
        _run(args, settings)
      文件 "/usr/local/lib/python3.8/site-packages/sh_scrapy/crawl.py", 第103行, 在_run中
        _run_scrapy(args, settings)
      文件 "/usr/local/lib/python3.8/site-packages/sh_scrapy/crawl.py", 第111行, 在_run_scrapy中
        execute(settings=settings)
      文件 "/app/python/lib/python3.8/site-packages/scrapy/cmdline.py", 第149行, 在execute中
        cmd.add_options(parser)
      文件 "/usr/local/lib/python3.8/site-packages/sh_scrapy/commands/shub_image_info.py", 第23行, 在add_options中
        parser.add_option("--debug", action="store_true",
    AttributeError: 'ScrapyArgumentParser'对象没有属性'add_option'
    {"message": "shub-image-info退出码: 1", "details": null, "error": "image_info_error"}
    {"status": "error", "message": "内部错误"}

问题原因

这个错误是版本不兼容导致的:

  • Scrapy在2.10及以上版本中,将命令行解析从optparse切换到了argparse,对应的解析器类变成了ScrapyArgumentParser,不再支持add_option()方法(这是optparse的API)。
  • 你使用的sh_scrapy(Zyte部署工具shub的核心依赖)版本过旧,仍在调用add_option()方法,和新版本Scrapy不兼容。

解决方法

  1. 升级部署工具shub
    执行以下命令更新到最新兼容版本:

    pip install --upgrade shub
    

    最新版的shub已经适配了Scrapy的argparse解析器,会自动处理版本兼容问题。

  2. 明确指定兼容版本组合
    如果升级后仍有问题,在项目的requirements.txt中明确标注兼容的Scrapy和shub版本,比如:

    scrapy>=2.10.0,<2.12.0
    shub>=2.16.0
    

    这样部署时Zyte云会安装指定的兼容版本。

  3. 检查自定义镜像(如果使用)
    如果你是用自定义Docker镜像部署,确保镜像中安装的sh_scrapy和Scrapy版本匹配,不要混用新旧版本。可以在Dockerfile中添加版本指定:

    RUN pip install scrapy==2.10.5 shub==2.16.0
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:54:23