皮皮王的专栏

本博客只是个人笔记,非正常实践时间,不对任何人负责,水平有限,只供参考,Nifi大师群:492666008...

从源码开始学习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的源码,这样也不会直接干到爬虫核心调度,我怕调度的你理解不够深入,浮于表面。所以慢慢来。。。

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

阅读更多
版权声明:本文为博主原创文章,支持转载,但希望你加上转载地址,原创不易,且转且珍惜。 https://blog.csdn.net/wang1472jian1110/article/details/80319314
文章标签: scrapy
个人分类: scrapy
所属专栏: 从源码开始学习Scrapy
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭