最近有很多同学在粉丝群里问如何调试Scrapy爬虫。有些人不知道如何让Scrapy爬虫进入调试模式;其他人不知道如何通过它。如何进入调试模式我们知道,当Scrapy项目想要启动爬虫时,需要在终端或者CMD中执行一条命令scrapycrawl爬虫名称。但是,PyCharm的调试模式需要以.py文件作为入口点运行。为了解决这个问题,我们可以在Scrapy项目的根目录下创建一个main.py文件,然后在里面写入如下一段代码:fromscrapy.cmdlineimportexecuteexecute('scrapycrawl爬虫名称'.split())然后,使用这个文件作为入口文件,右键这个文件,选择Debug'main',就可以正确启动PyCharm的调试模式,并在第一个断点处停止。如下图:如何纠正单步调试单步调试大家都知道,不就是下图红框里的两个按钮吗:左边是逐行调试,遇到函数可以直接跳过,右边是遇到函数就进入函数但是问题是,在Scrapy项目中,如果你的代码运行到yieldscrapy.Request,它使用yield来throwrequest对象,点击单步调试按钮,你会发现PyCharm跳转到了一个奇怪的地方,如下图:或者,你的代码发送了很多请求,回调函数在self.parse中。现在你已经读取了第一次请求返回的数据,断点停在28号OK,如下图:步骤调试,然后你来到了一个奇怪的地方:这个地方就像一个泥潭,无论你怎么跳出来都跳不出来,永远也回不来自己的代码。越是跳出来,PyCharm打开的陌生文件就越多,如下图所示:这种情况我们应该怎么办?其实很简单。你应该观察到调试面板上有一个按钮,如下图箭头所指:这个按钮的作用是让PyCharm运行代码,运行到你当前鼠标光标所在的位置,然后停止。那么,比如现在上图中的代码停在了第17行,我想马上运行到第28行怎么办?先在第28行点击鼠标,箭头所指的输入光标如下图:然后按这个Run到光标所在的按钮,你会发现代码已经运行到这一行(就是这一行,但此行尚未运行)。然后再次点击step-by-step按钮,就可以看到info变量的值了。读完第一个请求的返回值,如果想看第二个请求的返回值,你想怎么办?这也很容易做到。你再次用鼠标点击第27行或者第28行,然后再次点击运行到当前光标所在的按钮,第二次请求的结果立刻呈现在你面前:本文转载自微信公众号「UnheardCode」,可以通过以下二维码关注。转载本文请联系Code公众号。
