Win10 VSCode调试Scrapy Splash爬虫出现ReactorNotRestartable及导入错误
问题1:ReactorNotRestartable报错原因
- 错误触发原因:你原有配置中
launch.json使用scrapy runspider命令执行runner.py,而runner.py内部又调用了scrapy.cmdline.execute再次启动爬虫,等于连续两次触发Twisted reactor启动逻辑,而Twisted的reactor不允许重启,因此抛出该异常。 - 配置冗余问题:
runner.py和launch.json的功能重复,二者保留一个即可,无需同时使用。
问题2:删除runner.py后相对导入报错解决方案
报错原因:scrapy runspider是单文件运行模式,不会识别整个Scrapy项目的包层级结构,因此from ..myitems import RentalItem这种相对导入语法无法识别父包。
最优解决方案:修改launch.json配置,和命令行运行逻辑对齐
直接把launch配置改成执行标准scrapy crawl命令,自动加载项目完整结构,无需修改爬虫代码:
{ "version": "0.1.0", "configurations": [ { "name": "Python: Launch Scrapy Spider", "type": "python", "request": "launch", "module": "scrapy", "args": [ "crawl", "mytest", "-o", "out.json" ], "cwd": "C:\\scrapy\\hw_spiders", "console": "integratedTerminal" } ] }
修改后无需打开mytest.py再启动,直接按F5就会以项目根目录为工作目录执行爬虫,相对导入会正常生效,和你命令行直接跑scrapy crawl mytest -o out.json的逻辑完全一致。
可选方案:如果你坚持使用runspider
- 把mytest.py中的相对导入改成绝对导入:
# 把 from ..myitems import CarItem 改成 from hw_spiders.myitems import RentalItem
- 在launch.json中添加PYTHONPATH环境变量配置,确保项目根目录被Python识别:
"env": {"PYTHONPATH": "C:\\scrapy\\hw_spiders"}
额外代码问题提示
你的mytest.py中导入的是CarItem,但parse_object方法里实例化的是RentalItem,注意保持类名一致,避免后续运行报错。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

