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

无法通过.bat文件运行Scrapy Spider,求解决办法

Scrapy循环导入错误的解决方案

问题场景

通过以下.bat文件运行Scrapy爬虫:

@echo off
REM activate Python venv
CALL "D:\python\scrapy_projects\venv\Scripts\activate.bat"
CD "D:\python\scrapy_projects\digikalasellerdata\digikalasellerdata\spiders"
CALL "D:\python\scrapy_projects\venv\Scripts\python.exe" "D:\python\scrapy_projects\venv\Lib\site-packages\scrapy\cmdline.py" crawl my_deactivated -O kobs.csv
pause

运行后触发循环导入错误:

Traceback (most recent call last):
  File "D:\python\scrapy_projects\venv\Lib\site-packages\scrapy\cmdline.py", line 8, in <module>
    import scrapy
  File "D:\python\scrapy_projects\venv\lib\site-packages\scrapy\__init__.py", line 12, in <module>
    from scrapy.spiders import Spider
  File "D:\python\scrapy_projects\venv\lib\site-packages\scrapy\spiders\__init__.py", line 10, in <module>
    from scrapy.http import Request
  File "D:\python\scrapy_projects\venv\lib\site-packages\scrapy\http\__init__.py", line 8, in <module>
    from scrapy.http.headers import Headers
  File "D:\python\scrapy_projects\venv\lib\site-packages\scrapy\http\headers.py", line 3, in <module>
    from scrapy.utils.python import to_unicode
  File "D:\python\scrapy_projects\venv\lib\site-packages\scrapy\utils\python.py", line 16, in <module>
    from scrapy.utils.decorators import deprecated
  File "D:\python\scrapy_projects\venv\lib\site-packages\scrapy\utils\decorators.py", line 4, in <module>
    from twisted.internet import defer, threads
  File "D:\python\scrapy_projects\venv\lib\site-packages\twisted\internet\defer.py", line 44, in <module>
    from twisted.internet.interfaces import IDelayedCall, IReactorTime
  File "D:\python\scrapy_projects\venv\lib\site-packages\twisted\internet\interfaces.py", line 26, in <module>
    from twisted.python.failure import Failure
  File "D:\python\scrapy_projects\venv\lib\site-packages\twisted\python\failure.py", line 26, in <module>
    from twisted.python import reflect
  File "D:\python\scrapy_projects\venv\lib\site-packages\twisted\python\reflect.py", line 22, in <module>
    from twisted.python.compat import nativeString
  File "D:\python\scrapy_projects\venv\lib\site-packages\twisted\python\compat.py", line 35, in <module>
    from http import cookiejar as cookielib
  File "D:\python\scrapy_projects\venv\Lib\site-packages\scrapy\http\__init__.py", line 8, in <module>
    from scrapy.http.headers import Headers
ImportError: cannot import name 'Headers' from partially initialized module 'scrapy.http.headers' (most likely due to a circular import) (D:\python\scrapy_projects\venv\lib\site-packages\scrapy\http\headers.py)

解决方案

1. 修正.bat文件的执行逻辑

原bat文件存在两个核心问题:切换到了spiders子目录而非项目根目录,且直接调用cmdline.py而非使用标准scrapy命令。修改后的bat内容如下:

@echo off
REM 激活Python虚拟环境
CALL "D:\python\scrapy_projects\venv\Scripts\activate.bat"
REM 切换到Scrapy项目根目录(包含scrapy.cfg的文件夹)
CD "D:\python\scrapy_projects\digikalasellerdata"
REM 使用虚拟环境中的scrapy命令启动爬虫
scrapy crawl my_deactivated -O kobs.csv
pause
  • 虚拟环境激活后,scrapy命令会自动关联虚拟环境内的依赖,无需手动指定Python解释器和cmdline.py路径
  • 必须在项目根目录执行命令,否则Scrapy无法读取项目配置文件scrapy.cfg

2. 排查潜在的循环导入诱因

如果修改bat后仍报错,需检查以下两点:

  • 检查自定义代码中是否存在与Scrapy内置模块重名的文件(如http.py、headers.py),这类文件会覆盖Scrapy的内置模块,触发循环导入
  • 重新安装依赖以修复可能的文件损坏:
    pip uninstall scrapy twisted -y
    pip install scrapy
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:51:36