这就是回调地狱!!! 同志们不要学!!!所有的异常和数据处理下载等都被绑在request相关的deferred对象里了
本文解释了运行
scrapy crawl xxspider
命令后,scrapy内部是如何跑的,一步步拆解看
从命令行解析到具体调用命令请看:第一篇 《scrapy启动流程图(超详细)——cmdline.py解析》
从具体命令到创建crawlerprocess和实例化crawler 请看:第二篇《 scrapy启动流程图(2)——crawler的启动流程图》
下面的流程图详细的解释了engine代码之间是如何调用的
这里提前说明几点:
1.为什么request只有压入 没有弹出?
因为弹出是scraper内部的item处理类来调用的,engine里有download方法做为接口
2.程序准确的运行时间是什么时候 ?
是在上一层 Crawlerprocess里面的函数start 调用了
reactor.run 以后 这些代码才算是开始跑 对于deferred的各种操作仅仅可以当做是一种配置
deferred对象相当于结果的替代品,因为个结果还没生成
3.开启和关闭的部分代码为何没有解释?
开启和关闭的主要过程就是实例化相关的类 log 以及发送信号 ,关闭也就是这个过程倒放一遍 代码不难
4.engine.start的意义在哪里?
主要是生成一个deferred对象,当这个engine跑完了以后 可以调用一些针对engine结束后的回调
具体请看流程图: