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

Scrapy执行fetch(url)命令时遇RuntimeError问题求助

Scrapy fetch命令RuntimeError修复方案

环境信息

  • 系统:Ubuntu 22.04
  • 运行环境:Miniconda
  • Scrapy版本:2.7.1
  • Python版本:3.10.6

操作步骤

scrapy startproject worldometers
cd worldometers
scrapy shell
fetch("https://www.worldometers.info/world-population/population-by-country/")

错误信息

File "/home/miniconda3/envs/main/lib/python3.10/site-packages/twisted/internet/defer.py", line 857, in _runCallbacks
    current.result = callback(  # type: ignore[misc]
  File "/home/miniconda3/envs/main/lib/python3.10/site-packages/scrapy/utils/defer.py", line 285, in f
    return deferred_from_coro(coro_f(*coro_args, **coro_kwargs))
  File "/home/miniconda3/envs/main/lib/python3.10/site-packages/scrapy/utils/defer.py", line 272, in deferred_from_coro
    event_loop = get_asyncio_event_loop_policy().get_event_loop()
  File "/home/miniconda3/envs/main/lib/python3.10/asyncio/events.py", line 656, in get_event_loop
    raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'Thread-1 (start)'.
2022-11-12 21:08:55 [py.warnings] WARNING: /home/miniconda3/envs/main/lib/python3.10/site-packages/twisted/internet/defer.py:857: RuntimeWarning: coroutine 'SpiderMiddlewareManager.scrape_response.<locals>.process_callback_output' was never awaited
  current.result = callback(  # type: ignore[misc]

修复建议

方案1:降级Scrapy版本到2.6.x

该错误源于Scrapy 2.7.x与Python 3.10在异步事件循环处理上的兼容性问题,降级到稳定的2.6版本可直接解决:

pip install scrapy==2.6.3

方案2:指定异步事件循环策略

在Scrapy项目的settings.py中添加以下配置,强制使用Twisted的异步 reactor:

TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"

添加后重启Scrapy shell,重新执行fetch命令。

方案3:升级依赖包

更新Twisted和asyncio相关依赖,确保版本兼容:

pip install --upgrade twisted asyncio

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:20:33