1, 从最初本身编写的spiders,获取到start_url,而且封装成Request对象。架构
2,经过engine(引擎)调度给SCHEDULER(Requests管理调度器)。ide
3,SCHEDULER管理ENGINE传递过来的全部Requests,经过优先级,传递给ENGINE。编码
4,ENGINE 将传递过来的Request对象传递给Downloader(下载器),可是在传递之间会经过MiddleWare(中间件)对Requests进行包装,添加头部,代理IP之类的。url
5,Downloader(下载器)将包装好的Requests进行下载,并将下载后的Response对象传递给Engin。代理
6,Engin将Response对象传递给本身编码的Spider,可是中间仍有对于Response加工的中间件,在spider中经过本身编写的规则对内容进行提取。中间件
7,提取完成后会产生两种对象,一个是本身想要的数据,存储在Item中;另外一个是想要继续爬取的URL,包装成Request一并传递给Engine对象
8,Engine获取到 7 传递过来的Item,将其传递给ItemPipelines(Item管道,将Item中数据写入存储);获取到 7 传递来的Requests对象,跟以前同样,交给SCHEDULER进行管理调度blog
9,SCHEDULER中没有Requests对象须要下载时,爬虫关闭。ip