使用Visual Studio进行Scrapy调试

4
我是一名新手,正在学习Scrapy和Python,感觉很有趣。
请问是否可以使用Visual Studio来调试Scrapy项目?如果可以的话,怎么做呢?
5个回答

4
我已经创建了一个名为runner.py的init文件。
from scrapy.cmdline import execute
execute(['scrapy','crawl', 'spider_name'])

你只需要在项目选项中将该文件设置为启动项。

它可以与Visual Studio 2015一起使用。


2
您可以在Visual Studio 2012中安装PTVS。然后从现有的Python代码创建Python项目,并导入您的代码。
如果您熟悉Visual Studio,则与Visual Studio中的其他语言(如C++/C#)相同。只需创建一些断点,并使用调试启动脚本即可。
如ThanhNienDiCho所说,将“-mscrapy.cmdline crawl your_spider_name”添加到解释器参数中。

PTVS screenshot


谢谢Yuvan,我之前已经成功调试了Python。我想要的是使用VS调试scrapy。然而,我找到了这个链接http://pytools.codeplex.com/wikipage?title=Features%20Debugging#launch-modes它详细介绍了使用VS进行调试的选项。 - user3860415
我认为Scrapy与普通的Python项目没有任何区别。所有的普通Python脚本文件都可以使用。你提到的与我的答案中的PTVS是一样的。 - Yuan

1

嗯,我尝试了所有给出的答案,但都没有对我起作用。其中最接近的是@Rafal Zajac发布的答案,但它也对我失败了。

最终我在这里找到了解决方案,然而有些答案在新版本中也不再适用。

所以对我来说似乎有效的版本是这个:

from scrapy.crawler import CrawlerProcess
from tutorial.spiders.dmoz_spider import DmozSpider
import scrapy.utils.project 
from sys import stdin

print ("init...")
spider = DmozSpider()
setttings = scrapy.utils.project.get_project_settings()
process = CrawlerProcess(setttings)
process.crawl(spider)
process.start()
x = stdin.read(1)

这应该在启动脚本中,不需要脚本参数。


感谢指出我的解决方案不再起作用了。我又回到Scrapy上,所以我不得不再次修复VS中的调试问题。看起来与我最初建议的只有很小的差异。我已经更新了我的答案... - Rafal Zajac

0

我曾经遇到过同样的问题,Yuan的初始答案对我没有用。

要运行Scrapy,您需要打开cmd.exe

cd "project directory"
scrapy crawl namespider
  • scrapy 是 scrapy.bat。
  • namespider 是 spider 类中字段的值。
  • 要从 Visual Studio 运行 Scrapy,请使用 -mscrapy.cmdline crawl your_spider_name 的输入参数。请参见 http://imgur.com/2PwF3g0

0

更新:

看起来在 scrapy 的 1.1 版本中,您需要更改项目调试设置中的“脚本参数”为“runspider <spider 文件名>.py”,然后它应该按预期工作:

enter image description here


我是Python和Scrapy的新手,我认为我遇到了完全相同的问题。

我正在按照Scrapy网站上的教程http://doc.scrapy.org/en/latest/intro/tutorial.html进行操作,所以首先我生成了名为“tutorial”的Scrapy项目的文件结构。

下一步是创建一个新的Python项目“从现有的Python代码”,并选择顶层文件夹“tutorial”。当向导询问要导入哪些文件类型时,我只需使用*.*导入所有内容。如果您保留默认设置,则不会导入文件scrapy.cfg。

我想你已经做到了这一步,你想要的只是在spider类中设置断点,按F5开始调试吧?

我尝试了建议:

像ThanhNienDiCho说的那样,在解释器参数中添加“-mscrapy.cmdline crawl your_spider_name”。

在这种情况下,您还必须设置启动文件 - 我无法弄清楚这一部分。您不能使用项目中的任何文件,因为它不起作用,对吧?我尝试将dummy.py(空文件)添加到顶层作为启动文件,但是然后我收到了来自Scrapy的消息:“未知命令:爬行” - 这只是您运行命令“scrapy”但不是从项目文件夹运行时会收到的消息。 也许有一种方法可以使其工作,并且有人可以使用此方法解释完整的设置?我做不对。
最后,我注意到scrapy.bat的Linux等效文件是一个具有以下内容的python文件:
from scrapy.cmdline import execute
execute()

所以我用上面的内容用文件scrapy_runner.py替换了我的dummy.py(文件名无关紧要),这就是我的启动文件。

现在,最后一件事是在“项目属性” ->“调试” ->“脚本参数”中添加以下值:

crawl dmoz

其中“dmoz”是教程中蜘蛛的名称。

这个设置对我很有用,希望能帮到你。

enter image description here


为什么要将“crawl dmoz”作为参数传递?当我传递“mscrapy.cmdline crawl dmoz”时,我收到了“无法打开文件:'crawl'”的错误提示。而当我传递“mscrapy.cmdline crawl dmoz”时,我又收到了“未知命令:crawl”的错误提示。 - omer schleifer
我创建了我的评论2年前,自那以后就没有再使用过Scrapy。从我记得的来看,您需要传递“crawl dmoz”,以便在调试时由Visual Studio执行的结果命令是:“python scrapy_runner.py crawl dmoz”。然后,在执行scrapy_runner.py文件中的“execute()”函数时,将使用参数“crawl”和“dmoz”。 - Rafal Zajac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接