python爬虫框架Scrapy
爬虫框架Scrapy(一)
框架Scrapy是使用python实现的一个爬取网站数据、提取数据的异步网络框架,加快爬取数据。我们只需要开发几个模块就可以轻松的实现一个爬虫。
1、Scrapy架构
1.1、Scrapy架构
整体架构大致如下(绿线是数据流向):
每层的含义:
Spiders(爬虫器):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器);
Engine(引擎):框架核心,负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等;
Scheduler(调度器):它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理队列,当引擎需要时,交还给引擎;
Downloader(下载器):负责下载Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Engine(引擎),由引擎交给Spider来处理;
ItemPipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方;
Downloader Middlewares(下载中间件):介于Scrapy引擎和下载器之间的中间件,主要是处理Scrapy引擎与下载器之间的请求及响应;
Spider Middlewares(Spider中间件):介于Scrapy引擎和爬虫之间的中间件,主要工作是处理蜘蛛的响应输入和请求输出;
Scheduler Middlewares(调度中间件):介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应;
1.2、Scrapy执行流程
1、引擎:Hi!Spider,你要处理哪个网站;
2、Spider:老大,我要处理xxx.com;
3、引擎:你将第一个要处理的URL发给我吧;
4、Spider:给你,第一个URL是www.xxxxxx.com(Spider的yeild将请求request发送给Engin引擎);
5、引擎:Hi,调度器,我这有个请求你帮我排队入队一下(Engin引擎拿到request请求后,不做任何处理,发送给Schedulre调度器);
6、调度器Schedulre:好的,正在处理,稍等;
7、引擎:Hi,调度器,将处理好的请求request给我;
8、调度器:好的,给你,这是我处理好的request请i去(调度器会生成request请求交给引擎);
9、引擎:Hi,下载器,你按照老大的下载中间件的设置帮我下载一个这个request请求(引擎拿到调度器还的request请求,通过Middlewares过滤发送给Downloader下载器);
10、下载器:好的,给你这是下载好的内容(Downloader下载器从网上获得response数据后,经过Middlewares层层过滤发送给引擎,如果失败,引擎告诉调度器,这个request请求下载失败了,记录一下我们待会再下载);
11、引擎:Hi,Spider,这是下载好的内容,并且已经按照老大的下载中间件处理过了(引擎获得response响应数据后,交还给Spider,同时Spider的parse方法会对response数据进行处理,解析出items或者requests);
12、Spider:Hi,引擎,这是解析出来的items数据以及requests数据;
13、引擎:引擎获得数据后,将items发送给Itempiplines管道,将request发送给调度器Scheduler开始新的请求。
14-1:管道:好的,老大;
14-2:调度器:好的,老大;
注意、只有当调度器中不在存在request请求了,整个程序才会结束,对于失败的url,会重新下载。
2、Scrapy安装
Windows 安装方式为例:
pip install scrapy
##或者
pycharm安装