如何使用PyCharm来调试Scrapy项目

时间:2014-02-14 20:27:14

标签: python debugging python-2.7 scrapy pycharm

我正在使用Python 2.7开发Scrapy 0.20。我发现PyCharm有一个很好的Python调试器。我想用它来测试我的Scrapy蜘蛛。有人知道怎么做吗?

我尝试了什么

实际上我试图将蜘蛛作为一个脚本运行。结果,我构建了这个脚本。然后,我尝试将我的Scrapy项目添加到PyCharm作为这样的模型:

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

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

10 个答案:

答案 0 :(得分:152)

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

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

使用该脚本作为脚本在PyCharm中创建运行/调试配置。使用scrapy命令和spider填充脚本参数。在这种情况下crawl IcecatCrawler

像这样: PyCharm Run/Debug Configuration

将您的断点放在抓取代码中的任何位置,它应该有效。

答案 1 :(得分:93)

你只需要这样做。

在项目的crawler文件夹上创建一个Python文件。我用了main.py。

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

在main.py中,将此代码放在下面。

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

您需要创建一个“运行配置”来运行main.py。

这样做,如果你在你的代码上设置一个断点,它就会停在那里。

答案 2 :(得分:8)

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

答案 3 :(得分:8)

从2018.1开始,这变得容易得多。现在,您可以在项目的Module name中选择Run/Debug Configuration。将此设置为scrapy.cmdline,并将Working directory设置为scrapy项目的根目录(其中包含settings.py的目录)。

像这样:

PyCharm Scrapy debug configuration

现在,您可以添加断点来调试代码。

答案 4 :(得分:5)

intellij idea 也可以。

创建 main.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====================================================')

显示如下:

enter image description here

enter image description here

enter image description here

答案 5 :(得分:3)

要为接受的答案添加一点,几乎一个小时后,我发现我必须从下拉列表中选择正确的运行配置(靠近图标工具栏的中心),然后单击调试按钮以获取它上班。希望这可以帮助!

答案 6 :(得分:2)

我也在使用PyCharm,但我没有使用它的内置调试功能。

对于调试我正在使用ipdb。我设置了一个键盘快捷键,可以在我希望断点发生的任何一行上插入import ipdb; ipdb.set_trace()

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

这非常灵活,适用于PyCharm以外的环境,您无法控制执行环境。

只需输入您的虚拟环境pip install ipdb,然后将import ipdb; ipdb.set_trace()放在您希望执行暂停的行上。

答案 7 :(得分:0)

根据文件https://doc.scrapy.org/en/latest/topics/practices.html

import scrapy
from scrapy.crawler import CrawlerProcess

class MySpider(scrapy.Spider):
    # Your spider definition
    ...

process = CrawlerProcess({
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})

process.crawl(MySpider)
process.start() # the script will block here until the crawling is finished

答案 8 :(得分:0)

我使用以下简单脚本:

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

process = CrawlerProcess(get_project_settings())

process.crawl('your_spider_name')
process.start()

答案 9 :(得分:0)

扩展了答案的@Rodrigo版本,我添加了此脚本,现在我可以通过配置设置蜘蛛网名称,而不用更改字符串。

import sys
from scrapy import cmdline

cmdline.execute(f"scrapy crawl {sys.argv[1]}".split())