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

使用Scrapy Shell请求网站时触发RuntimeError错误求助

Scrapy Shell使用fetch(Request)触发RuntimeError的解决方法

问题场景

使用Scrapy 2.7.1 + Python 3.11在Windows环境下,按以下操作尝试获取https://quotes.toscrape.com/的响应:

  1. 启动Scrapy Shell:
python -m scrapy shell
  1. 在Shell中手动构造Request并执行fetch:
>>> from scrapy import Request
>>> req = Request("https://quotes.toscrape.com/")
>>> fetch(req)

执行后出现核心报错:

RuntimeError: There is no current event loop in thread 'Thread-1 (start)'.

同时伴随协程未await的警告:

RuntimeWarning: coroutine 'SpiderMiddlewareManager.scrape_response.<locals>.process_callback_output' was never awaited

虽然日志显示请求已返回200,但无法通过response变量访问响应内容。

原因分析

这是Python 3.11与Scrapy 2.7.x版本的兼容性问题:Python 3.11对asyncio事件环的线程绑定逻辑做了调整,而Scrapy 2.7.x的deferred_from_coro方法在多线程场景下无法正确获取当前事件环,导致触发报错。

解决方案

方案1:使用Scrapy Shell推荐的快捷fetch方式

不需要手动构造Request,直接传入URL调用fetch,内部会自动处理事件环问题:

>>> fetch("https://quotes.toscrape.com/")

执行后即可通过response变量访问响应内容,比如输入response.status会返回200,view(response)可在浏览器中查看页面。

方案2:降级Python版本到3.10

如果必须使用手动构造Request的方式,将Python版本降级到3.10,该版本与Scrapy 2.7.x的兼容性更好,不会出现事件环相关报错。

方案3:升级Scrapy到2.8及以上版本

Scrapy 2.8及后续版本已修复了Python 3.11的兼容性问题,升级后手动构造Request的方式可正常工作。执行以下命令升级:

pip install --upgrade scrapy

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:45:30