从源码开始学习Scrapy系列02-从命令行开启项目入口

前言

这篇算是真正的源码剖析开始了,你即将成为一个真正的男人哦=。=,哈哈

准备工作

(1)如果当前scrapy项目所处的python环境中有scrapy的包,那么需要注意的是当前项目如果也叫scrapy,那么就不必要担心会引入site-package中的scrapy,因为当前目录的自定义模块优先级要高。如果当前项目不叫scrapy,那么你就最好屏蔽掉site-package中的scrapy,避免引入它(可以先mv成别名),为了后面debug源码时候方便记录做笔记(无法直接修改第三方package)。

(2)之后项目debug的时候,可能会遇到有些depends没有的情况,到时候自己装一哈

(3)源代码随便改,不改不会,所以不要担心哪里改坏了

目录结构

这里包很多,重点关注以下几个包就可以,其余的以后自然会接触到,

commands(所有的指令定义相关)

core(scrapy的核心,包含引擎,调度器,下载器,scrapy解析组件,spider中间件管理器)

downloadmiddlewares(下载中间件,具体是谁和谁的中间呢,后面架构图会说道,别急-。-)

http(所有http协议请求相关的定义)

piplines(管道组件定义相关)

settings(scrapy的默认配置定义)

spidermiddlerwares(spider中间件)

spider(一个spider的最小单元定义相关)

templates(项目模板定义,createproject指定就是依据这个模板创建项目的)

之后的就是一些模块定义,以后我们基本都会用到,所以这一步就不具体介绍了,github的源码翻译里面有详细描述,可以关注。

项目入口


打开根目录下的这俩个模块,这就是项目的实际入口(当然说得是本质scrapy的项目入口,是从命令行开始的,如果你非要说什么别的中间件引入scrapy,那必然可以跳过这个入口,重新定义入口咯)

 
from cmdline import execute

if __name__ == '__main__':
    execute()

很明显,调用了cmdline的execute方法,也就是命令行的入口,打开cmdline模块,定位到excute方法

至此,在第一行代码出下断点,开启debug之旅。。。于是你点击了执行,一步一步下去,最后只能输出一个help的内容,并无法看到核心指令crawl执行爬虫时候的调度过程,那这样做就没有什么卵用,看指令定义源码有屁用啊。说得没错,确实有个屁用,哈哈。

其实,想一想,我们之前写一个scrapy项目,是不是要按照前辈们的指示,使用scrapy startproject指令创建一个scrapy项目呢。你仔细观察一下这个项目初始化后有哪些文件模块生成呢。并且你可以做个小测试,在一个空项目(项目python环境引用是有的)下面执行scrapy指令,然后在刚刚创建好的scrapy项目下执行scrapy指令。你看一下俩个输出的help信息一样么?

好,我直接给出结论,如果你不在scrapy项目下执行指令,那么默认是不能使用crawl等指令的。至于为什么,什么原理,我们后面看源码一步一步了解。

所有废话说了这么多,总结一下:目前先不要管如何调试后面的爬虫调度,我准备按照command里面的顺序来把调试scrapy的源码,这样也不会直接干到爬虫核心调度,我怕调度的你理解不够深入,浮于表面。所以慢慢来。。。

github地址

https://github.com/wangrenlei/debug_scrapy


下一章开始从bench指令讲起,让你初步了解指令机制,指令调度,欢迎大朋友们继续关注哦-。-

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值