Scrapy 框架

1.架构

首先从整体上看一下scrapy框架的架构图(来自scrapy官网)
Scrapy 框架_第1张图片
从上图我们可以看出scrapy框架主要是由5个组件构成:

  • Engine(引擎):最核心的部位,用来处理整个系统的数据流和事件,是整个框架的核心,负责数据的流转和逻辑的处理,相当于整个系统的CPU
  • Scheduler(调度器):用来接收引擎发过来的request请求并将其加入到队列中,也可以将request发送回Engine(引擎)供Downloader使用,主要负责维护requests的调取逻辑,比如先进先出、先进后出、优先级进出等
  • Spiders(蜘蛛): 包含多个spider,每个spider里面定义了要爬取站点的爬取逻辑和页面的解析逻辑,主要负责解析响应并生成Item和新的请求,然后发送给Engine处理
  • Downloader(下载器):向互联网服务器发送请求,得到响应的过程,得到的响应会发送给Engine进行处理
  • Item Pipelines(管道):负责处理Spider从页面中抽取的Item,做一些数据清洗、验证和存储的工作,例如存储数据到数据库当中,对Item的一些字段进行规整等操作。

除了上面的5大部件之外,Scrapy还包括以下几个小部件

  • Item: 是一个抽象的数据结构,定义了爬取结果的数据结构,爬取的数据会被赋值成为item对象。每一个Item对象就是一个类,类当中定义了爬取结果的数据字段,可以理解为它用来规定爬取数据的存储格式。
  • Downloader Middlewares(下载中间件):位于Engine和Downloader之间的小方块,包含多个Downloader Middleware,每一个Downloader Middleware负责实现Downloader和Engine之间额请求和响应的处理过程
  • Spider Middlewares(爬虫中间件): 位于Engine和Spiders之间的方块部分,负责实现Spiders和Engine之间的Item、请求和响应的处理过程

数据流向

根据上面的架构图我们可以得出Scrapy框架的运行数据流向过程:

  1. 启动爬虫项目时,Engine根据要爬取的站点找到处理该站点的Spider,Spider生成最初需要爬取的页面对应的一个或者多个Request,然后发送给Engine
  2. Engine从Spider中获取这些Request,然后把他们交给Scheduler等待被调度
  3. Engine向Scheduler发送处理下一个request请求的申请,Scheduler从任务队列中抽取一个request请求任务交给Engine
  4. Engine将Scheduler发送过来的request请求交给Downloader进行下载执行,将Requests发送给Downloader的过程中会经过许多定义好的Downloader Middlewares的处理
  5. Downloader 将Request发送给目标服务器,得到对应的Response,然后返回给Engine,将Response返回Engine的过程中同样会经过很多定义好的Downloader Middlewares的处理
  6. Engine从Downloader处接收到的Response里面包含了爬取目标站点的内容,Engine会将此Response发送给对应的spider进行处理,将Response发送给spider的过程中会经过定义好的Spider Middlewares的处理
  7. spider解析Response响应中的内容,这时spider会产生一个或者多个爬取结果Item或者后续要爬取的目标页面对应的一个或者多个Request,然后将这些Item或者Request发送给Engine进行处理,将Item或者Request发送给Engine的过程中也会经由定义好的Spider Middlewares进行处理
  8. Engine将spider发回的一个或者多个Item转发给定义好的Item Pipeline进行数据的处理或者存储,将spider发回的一个或者多个Request转发给Scheduler等待下一次的调度

重复2步到第8步的过程,直达票Scheduler中没有更多的Request,这时Engine会关闭Spider,整个爬取过程结束。

你可能感兴趣的:(python,爬虫)