一日一技:如何正确在 PyCharm 中调试 Scrapy 爬虫?

开发 项目管理
我们知道,Scrapy 项目要启动爬虫的时候,需要在终端或者 CMD 中执行一段命令scrapy crawl 爬虫名。但是,PyCharm 的调试模式需要以某个.py文件作为入口来运行。

[[404551]]

最近有不少同学在粉丝群里面问,如何调试Scrapy 爬虫。有些人不知道如何让 Scrapy 爬虫进入调试模式;还有一些人不知道怎么单步调试。

怎么进入调试模式

我们知道,Scrapy 项目要启动爬虫的时候,需要在终端或者 CMD 中执行一段命令scrapy crawl 爬虫名。但是,PyCharm 的调试模式需要以某个.py文件作为入口来运行。

为了解决这个问题,我们可以在 Scrapy 项目的根目录创建一个 main.py文件,然后在里面写下如下一段代码:

  1. from scrapy.cmdline import execute 
  2.  
  3. execute('scrapy crawl 爬虫名'.split()) 

然后,以这个文件作为入口文件,在这个文件上右键,选择Debug 'main',就可以正确启动 PyCharm 的调试模式并在第一个断点上停下来了。如下图所示:

如何正确单步调试

单步调试大家都会,不就是下图中画红框的这两个按钮嘛:

左边是逐行调试,遇到函数直接跳过,右边是遇到函数进入

但问题是,在 Scrapy 项目里面,如果你的代码运行到了yield scrapy.Request这种使用yield抛出请求对象的语句,只要再按一下单步调试的按钮,你就会发现 PyCharm 跳转到了一个陌生的地方,如下图所示:

又或者,你的代码发送了很多次请求,回调函数都到self.parse里面,现在你已经看完第一条请求返回的数据了,断点停在了第28行,如下图所示:

现在你想看第二次请求的返回数据,于是你点了一下单步调试,于是你又来到了一个陌生的地方:

这个地方就像一个泥潭,无论你怎么跳出都跳不出来,始终无法回到你自己的代码中。你越是往外跳,PyCharm 就会打开越多的陌生文件,如下图所示:

遇到这种情况怎么办呢?实际上非常简单,你注意观察在调试面板上,还有一个按钮,如下图箭头所指:

这个按钮的功能,是让 PyCharm 运行的代码,运行到你当前鼠标光标所在的位置再停下来。所以,例如现在上面图中的代码停在了第17行,我想马上运行到第28行怎么办?鼠标首先在第28行点一下,如下图所示箭头指向的输入光标:

然后按下这个运行到光标的按钮,就会发现代码已经运行到了这一行(是到了这一行,还没有运行这一行)。接下来你再按一下单步调试按钮,就能看到 info 变量的值了。看了第一次请求的返回值以后,你想看第二次请求的返回值怎么办呢?也很好办,你再一次用鼠标点一下第27行或者第28行,接下来再次点击运行到当前光标的按钮,于是第二次请求的结果立刻就出现在了你的面前:

本文转载自微信公众号「未闻Code」,可以通过以下二维码关注。转载本文请联系未闻Code公众号。

 

责任编辑:武晓燕 来源: 未闻Code
相关推荐

2021-09-26 05:01:55

Scrapy项目爬虫

2020-12-04 06:39:25

爬虫网页

2023-10-28 12:14:35

爬虫JavaScriptObject

2021-10-03 20:08:29

HTTP2Scrapy

2021-07-27 21:32:57

Python 延迟调用

2021-09-14 21:29:01

项目环境变量

2022-03-12 20:38:14

网页Python测试

2021-10-15 21:08:31

PandasExcel对象

2020-12-11 06:30:00

工具分组DataFrame

2021-12-15 22:04:11

浏览器重复登录

2021-03-12 21:19:15

Python链式调用

2021-09-13 20:38:47

Python链式调用

2024-01-29 00:45:36

跨域后端接口

2022-06-28 09:31:44

LinuxmacOS系统

2022-01-26 07:35:10

爬虫Requestsgzip

2022-08-26 09:34:19

单元测试代码项目

2021-06-18 05:54:27

MongoDB数据

2021-05-08 19:33:51

移除字符零宽

2021-04-27 22:15:02

Selenium浏览器爬虫

2022-06-09 21:34:41

Python代码函数
点赞
收藏

51CTO技术栈公众号