如何使用PyCharm来debuggingScrapy项目

我正在Python 2.7中使用Scrapy 0.20。 我发现PyCharm有一个很好的Pythondebugging器。 我想testing我的Scrapy蜘蛛使用它。 任何人都知道该怎么做?

我曾经尝试过

其实我试图把蜘蛛作为脚本来运行。 结果,我build立了这个脚本。 然后,我尝试将我的Scrapy项目添加到PyCharm中,像这样:

File->Setting->Project structure->Add content root. 

但我不知道我还有什么要做的

scrapy命令是一个python脚本,这意味着你可以从PyCharm里面启动它。

当您检查scrapy二进制文件( which scrapy )时,您会注意到这实际上是一个python脚本:

 #!/usr/bin/python from scrapy.cmdline import execute execute() 

这意味着scrapy crawl IcecatCrawler的命令也可以像这样执行: python /Library/Python/2.7/site-packages/scrapy/cmdline.py crawl IcecatCrawler

试着findscrapy.cmdline包。 在我的情况下,位置在这里: /Library/Python/2.7/site-packages/scrapy/cmdline.py

在脚本中使用该脚本在PyCharm中创build一个运行/debuggingconfiguration。 用scrapy命令和蜘蛛填充脚本参数。 在这种情况下, crawl IcecatCrawler

喜欢这个: PyCharm运行/调试配置

把你的断点放在你的抓取代码中的任何地方,它应该工作。

你只需要这样做。

在您的项目的履带文件夹上创build一个Python文件。 我用main.py.

  • 项目
    • 履带
      • 履带
        • 蜘蛛
      • main.py
      • scrapy.cfg

在你的main.py里面放这个代码。

 from scrapy import cmdline cmdline.execute("scrapy crawl spider".split()) 

而且你需要创build一个“运行configuration”来运行你的main.py。

这样做,如果你在你的代码中放置一个断点,它将停在那里。

我在Python 3.5.0的virtualenv中运行scrapy,并将“script”参数设置为/path_to_project_env/env/bin/scrapy ,为我解决了这个问题。

为了给接受的答案增加一点点,经过近一个小时,我发现我必须从下拉列表(靠近图标工具栏的中心)select正确的运行configuration,然后点击debuggingbutton才能使其工作。 希望这可以帮助!

我也使用PyCharm,但我没有使用它的内置debuggingfunction。

为了debugging我正在使用ipdb 。 我设置了一个键盘快捷方式来插入import ipdb; ipdb.set_trace() import ipdb; ipdb.set_trace()在任何一行我想断点发生。

然后我可以键入n来执行下一个语句, s进入一个函数,键入任何对象的名称来查看它的值,改变执行环境,键入c继续执行…

这是非常灵活的,在PyCharm以外的环境中工作,在那里你不控制执行环境。

只需input您的虚拟环境pip install ipdb并将import ipdb; ipdb.set_trace() import ipdb; ipdb.set_trace()在您希望执行暂停的行上。

intellij的想法也工作。

创buildmain.py

 #!/usr/bin/env python # -*- coding: utf-8 -*- #coding=utf-8 import sys from scrapy import cmdline def main(name): if name: cmdline.execute(name.split()) if __name__ == '__main__': print('[*] beginning main thread') name = "scrapy crawl stack" #name = "scrapy crawl spa" main(name) print('[*] main thread exited') print('main stop====================================================') 

如下所示:

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明