使用 Visual Studio 进行 Scrapy 调试

Posted

技术标签:

【中文标题】使用 Visual Studio 进行 Scrapy 调试【英文标题】:Scrapy debug using Visual Studio 【发布时间】:2014-09-11 21:02:24 【问题描述】:

我是 Scrapy 和 Python 的新手,我很喜欢它。

是否可以使用 Visual Studio 调试 scrapy 项目?如果可能,怎么做?

【问题讨论】:

【参考方案1】:

我创建了一个名为 runner.py 的初始化文件

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”添加到您的解释器参数中。

【讨论】:

谢谢 Yuvan,我之前已经成功调试过 Python。我一直在寻找的是使用VS调试scrapy。但是,我发现这个链接pytools.codeplex.com/… 详细说明了使用 VS 的调试选项。 我不认为scrapy与普通的python项目有什么区别。所有正常的python脚本文件。您提到的与我的回答中的 PTVS 相同。【参考方案3】:

好吧,我尝试了所有给 OP 的答案,但没有一个对我有用。最接近的似乎是@Rafal Zajac 发布的,但它对我来说也失败了。

我最终在here 中找到了解决方案,但是 还有一些答案在新版本中不再有效。

所以似乎对我有用的版本是这样的:

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 中的调试。看起来与我最初的建议只有很小的不同。我已经更新了我的答案...【参考方案4】:

我遇到了同样的问题,袁的initial answer 对我不起作用。

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

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

【讨论】:

【参考方案5】:

更新:

看起来对于 1.1 版的scrapy,您必须将项目调试设置中的“脚本参数”更改为“runspider .py”,它应该可以按预期工作:


我也是 python 和 scrapy 的新手,我想我遇到了完全相同的问题。

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

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

我猜你已经走到这一步了,你只是想要一个断点,例如在蜘蛛类中,按 F5 并开始调试?

我按照建议尝试了:

正如 ThanhNienDiCho 所说,将“-mscrapy.cmdline crawl your_spider_name”添加到您的解释器参数中。

在这种情况下,您还必须设置启动文件 - 我无法弄清楚这部分。您不能使用项目中的任何文件,因为它不是这样工作的,对吧?我尝试在顶层添加 dummy.py (空文件)作为启动文件,但随后我从 Scrapy 收到一条消息“未知命令:爬行” - 只是运行命令“scrapy”但不是从项目文件夹中。 也许有办法让它工作,有人可以用这种方法解释完整的设置?我没弄好。

最后我注意到scrapy.bat的linux等价物是一个python文件,内容如下:

from scrapy.cmdline import execute
execute()

所以我将我的 dummy.py 替换为具有上述内容的文件 scrapy_runner.py(文件名无关紧要)——这就是我的启动文件。

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

抓取 dmoz

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

此设置对我有用。我希望这会有所帮助。

【讨论】:

为什么将“crawl dmoz”作为参数传递?我收到错误无法打开文件:传递 mscrapy.cmdline 时出现“crawl” crawl dmoz 我收到“unknown command: crawl”错误 我在 2 年前创建了我的评论,此后再也没有使用过 scrapy。据我所知,您需要传递“crawl dmoz”,以便在调试时由 Visual Studio 执行的结果命令是:“python scrapy_runner.py crawl dmoz”。当执行文件 scrapy_runner.py 中的函数“execute()”时,将使用参数“crawl”和“dmoz”。

以上是关于使用 Visual Studio 进行 Scrapy 调试的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Studio 进行测验

无法使用 Visual Studio Lightswitch 进行调试

在Visual Studio中使用Lambdas进行模板化变量错误?

使用Visual Studio2013打开Visual Studio2015项目

使用 Visual Studio Code 进行远程开发

Qt:使用 Visual Studio 进行单元测试