scrapy基本介绍及运行原理

Scrapy框架

1 scrapy是用纯python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途广泛。

2 用户只需要定制开发的几个模块就能轻松实现一个爬虫,用来抓取网页内容、图片。

3 scrapy使用Twisted[twistrd](其主要对手是tornado)异步网络框架来处理网络通讯可以加快下载速度,不用自己实现一部框架,并且包含了各种中间件可以灵活的完成各种的需求

Scrapy组件介绍

1 Scrapy Engine(引擎):负责spider、itempipline、Downloader、scheduler中间的通讯,信号、数据传递等。

2 Scheduler(调度器):它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时交还给引擎。

3 Downloader(下载器):负责下载scrapy Engne(引擎)发送过来的所有requests请求,并将获取到的responses交换给scrapy Engine,有引擎交给spider来处理。

4 spider(蜘蛛):负责处理所有responses,从中分析提取数据,获取item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入调度器。

5 itempipline(管道):负责处理spider中获取到的item,并进行后期处理(详细分析、过滤、储存等)的地方

6 spider middlewares(spider中间件):可以自定义扩展、操作引擎和spider中间 通信  的功能组件。(比如进入spider和Responses,和从spoider出去的requests)

 

crapy架构图(绿线是数据流向)

 

 scrapy基本介绍及运行原理

 

 

 

Scrapy运行流程

引擎访问spider,询问需要处理的URL链接,spider收到请求,将需要处理的URL告诉引擎,然后将URL给引擎处理。

引擎通知调度器,调度器得到通知将URL排序入队,并加以处理。

引擎通知调度器,调度器将处理好的request返回给引擎

引擎接收到request后告诉下载器,按照setting中配置的顺序下载这个request的请求

下载器收到请求,将下载好后的东西返回给引擎。如果下载失败,下载器会通知引擎,引擎再通知调度器,调度器收到消息后会记录这个下载失败的request。

引擎得到下载好的东西后,通知spider(这里responses默认是交给def parse()函数处理)

7 Spider收到通知后,处理接收的数据

8 Spider处理完数据后返回给引擎两个结果:一个是需要跟进的URL,另一个是获取到的item数据。

引擎将接收到的item数据交给管道处理,将需要跟进的URL交给调度器处理。重复循环直到获取完需要的全部信息。