使用Scrapy fetch命令触发RuntimeError(无事件循环)的求助
解决Scrapy Shell中
fetch()触发的"There is no current event loop"错误 问题场景
在Ubuntu 22.04 LTS的PyCharm虚拟环境中运行Scrapy Shell,执行fetch('https://kwejk.pl/')时触发以下错误:
RuntimeError: There is no current event loop in thread 'Thread-1 (start)'.
修复方案
方案1:修改Scrapy的defer.py文件(临时快速修复)
找到虚拟环境中Scrapy的defer.py文件,路径示例:/home/poppap/PycharmProjects/pythonProject/venv/lib/python3.10/site-packages/scrapy/utils/defer.py
打开文件后定位到deferred_from_coro函数,将原代码:
event_loop = get_asyncio_event_loop_policy().get_event_loop()
替换为:
try: event_loop = get_asyncio_event_loop_policy().get_event_loop() except RuntimeError: event_loop = get_asyncio_event_loop_policy().new_event_loop() get_asyncio_event_loop_policy().set_event_loop(event_loop)
保存文件后重新启动Scrapy Shell即可。
注意:此修改会在Scrapy版本升级后被覆盖,适合临时解决问题。
方案2:安装兼容Python3.10的Scrapy版本
Python3.10与部分旧版Scrapy存在asyncio兼容问题,安装指定兼容版本即可彻底解决:
pip install scrapy==2.7.1
方案3:使用系统终端替代PyCharm内置终端
PyCharm内置终端的线程环境可能导致事件循环异常,切换到Ubuntu系统终端操作:
- 打开系统终端,激活虚拟环境:
source /home/poppap/PycharmProjects/pythonProject/venv/bin/activate
- 进入项目目录:
cd whiskyscraper
- 启动Scrapy Shell并执行
fetch命令:
scrapy shell fetch('https://kwejk.pl/')
内容的提问来源于stack exchange,提问作者How FunnyTv
相关产品推荐
相关产品推荐

