在 Pycharm 中 debug Scrapy 项目

缘起

为什么写这篇文章呢?因为自己想在 Scrapy 项目里 debug, 看看 Response 有哪些属性。但是 Scrapy 的官方文档的 debug 说明只有 VSCode 的,没有 Pycharm 的(详见:https://docs.scrapy.org/en/latest/topics/debug.html):

复制代码
{
    "version": "0.1.0",
    "configurations": [
        {
            "name": "Python: Launch Scrapy Spider",
            "type": "python",
            "request": "launch",
            "module": "scrapy",
            "args": [
                "runspider",
                "${file}"
            ],
            "console": "integratedTerminal"
        }
    ]
}

当然,如果熟悉 VSCode 的人看到这个配置就明白其实执行方式是:python -m scrapy runspider xxx_spider.py (注:这里的 xxx_spider.py 指 spider 文件,如官方文档里面的 quotes_spider.py)。如果这个人同时还熟悉 Pycharm, 那么他就知道在 Pycharm 里面配置进行 debug:

很遗憾,我不是这样的人,所以就有了这篇文章。

说明

时间:2025/12/06

Pycharm 版本:2025.2.4

Python 版本:3.12.0

Scrapy 版本:2.13.4

Windows 版本:Win 11

main.py

在与 scrapy.cfg 文件同层级的目录中新建一个名为 main.py 的文件,用于 debug。示例:

复制代码
# main.py
from scrapy.cmdline import execute


if __name__ == '__main__':
    print(1)
    print(2)
    execute(['scrapy', 'crawl', 'manning'])

项目结构:

TypeError: 'Task' object is not callable

当 Debug'main'时, 出现错误:

复制代码
2025-12-06 10:51:15 [asyncio] ERROR: Exception in callback <Task pending name='Task-1' coro=<ExecutionEngine.open_spider() running at D:\Projects\PythonProjects\python-talk\backend\venv\Lib\site-packages\scrapy\core\engine.py:430> cb=[Deferred.fromFuture.<locals>.adapt() at D:\Projects\PythonProjects\python-talk\backend\venv\Lib\site-packages\twisted\internet\defer.py:1255]>()
handle: <Handle <Task pending name='Task-1' coro=<ExecutionEngine.open_spider() running at D:\Projects\PythonProjects\python-talk\backend\venv\Lib\site-packages\scrapy\core\engine.py:430> cb=[Deferred.fromFuture.<locals>.adapt() at D:\Projects\PythonProjects\python-talk\backend\venv\Lib\site-packages\twisted\internet\defer.py:1255]>()>
Traceback (most recent call last):
  File "D:\Apps\Python3.12\Lib\asyncio\events.py", line 84, in _run
    self._context.run(self._callback, *self._args)
TypeError: 'Task' object is not callable

之所以产生这个问题,不是代码的问题,是 Pycharm debuger 的问题,我还没梳理完,故暂不展开,只讲怎么解决。

Debug 方式

方法 1:TWISTED_REACTOR

  1. Settings > Python > Debugger,取消 Gevent compitable 的勾选。

2.在项目的 settings.py 文件里设置 TWISTED_REACTOR = 'twisted.internet.selectreactor.SelectReactor'

方法 2:python.debug.asyncio.repl

1.Settings > Python > Debugger,取消 Gevent compitable 的勾选(这步和方法 1 是一样的)。

2.双击 Shift 键打开搜索窗口。

双击 Shift 的意思是"search everywhere,详见 https://www.jetbrains.com/help/pycharm/searching-everywhere.html"。

3.点击 ALL 选项,输入 registry,最后点击 Regisry 选项。

4.找到 python.debug.asyncio.repl,取消勾选 Value 列的方框。

验证

如上图所示,设置后可以 debug。

参考资料

1.Scrapy 文档, Debugging Spiders: https://docs.scrapy.org/en/latest/topics/debug.html

2.Pycharm 文档,Search for a target by name:https://www.jetbrains.com/help/pycharm/searching-everywhere.html

欢迎搜索及关注:编程人(a_codists),如有问题请留言。

相关推荐
高洁0113 分钟前
边缘AI与大模型轻量化:让智能跑进每一个终端
人工智能·python·深度学习·机器学习·迁移学习
MoRanzhi12031 小时前
第6篇(中)· 使用 PyQt5 实现 2048 高性能计算版:无头后台求解与三档运行模式
python·pyqt·数据持久化·多进程·进程间通讯·后台任务·断点续跑
Metaphor6923 小时前
Python 自动化办公:如何轻松在 PDF 中导入与导出表单数据
python·pdf·自动化
外收内放12 小时前
面向对象高级(实战案例)
开发语言·python·学习
专业程序开发源12 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
FPGA小迷弟13 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude
卷无止境13 小时前
面向arm64桌面客户端开发全景:语言、框架与生态
后端·python
fanruitian13 小时前
python else用法
开发语言·python
Thinker QAQ13 小时前
并发编程(十一):Shared Memory 与 Message Passing——关系与组合使用
java·python·go·并发编程·shared memory·message passing
用户83562907805114 小时前
如何使用 Python 对 Excel 数据进行分组和分级显示
后端·python