如何在 Pycharm 中调试 Scrapy 项目进行抓取?

摘要:缘起 为什么写这篇文章呢?因为自己想在 Scrapy 项目里 debug, 看看 Response 有哪些属性。但是 Scrapy 的官方文档的 debug 说明只有 VSCode 的,没有 Pycharm 的(详见:https:doc
缘起 为什么写这篇文章呢?因为自己想在 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 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),如有问题请留言。