Scrapy架构概览及数据流

Scrapy架构概览图

Scrapy 架构概览

1、Scrapy Engine
  Scrapy的核心引擎,负责控制数据在系统所有组件中的流动,并在相应动作发生时触发事件,相当于整个框架的总指挥。

2、调度器
  调度器(Scheduler)可以被看作一个优先级队列。它从核心引擎接受request并将它们入队,以便之后引擎请求它们时按照优先级提供给引擎。

3、下载器
  下载器(Download)负责和网络交,主要作用是获取页面数据并提供给引擎,而后提供给spider做解析,下载器在整个Scrapy架构中应该是负担最重的组件,由于其需要和网络交互,直接影响Scrapy的爬取效率。

4、Spiders
  Spiders是Sprapy用户编写用于分析response并提取item(即获取到的item)或额外跟进URL的类。对用户编写爬虫而言,它是最重要的组件。用户可以在同一个项目中编写多个spider,每个spider负责处理一个特定(或一些)的网站。

5、Item Pipeline
  Item Pipeline负责处理被spider提取出来的Item。典型的处理有:清理、验证及持久化(如存储数据)。

6、下载器中间件
  下载器中间件(Download Middlewares)是在核心引擎及下载器之间的特定钩子,负责处理引擎传递给下载器的request和下载器传递给引擎的response。其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。

7、爬虫中间件
  爬虫中间件(Spider Middlewares)是在核心引擎及spider之间的特定钩子,处理spider的输入(response)和输出(items及requests)。其提供了一个简便的机制,过插入自定义代码来扩展Scrapy功能。

Scrapy 数据流详解

当启动Scrapy爬虫时,Scrapy 会产生以下几个动作:

(1) 引擎将start_urls列表中的URL加近调度器(Scheduler)调度。如果重写了start_urls方法,就将最新方法中的URL加近调度器。

(2) 引擎向调度器请求下一个要爬取的URL。

(3) 调度器给引擎返回下一个要爬取的URL,引擎将URL通过下载中间件【请求(request)方向】转发给下载器(Downloader)。

(4) 一旦页面下载完毕,下载器生成一个该页面的response,并将其通过下载中间件【返回(response)方向】发送给引擎。

(5) 引擎将下载器中接收到的response并通过爬虫中间件(输入方向)发送给spider处理。

(6) spider根据编写的提取逻辑,处理response并给引擎返回爬取到的Item及(根据规则跟进的url)新的request。

(7) 引擎将(spider返回的)爬取到的Item给Item Pipeline,将(spider返回的)request给调度器。

(8) 从第二步重复直到调度器中没有更多的request,引擎关闭该爬虫。

每天进步一点点, To bend over backwards!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。