【scrapy学习】-----架构

scrapy架构以及组件在系统中的数据流

架构结构图

【scrapy学习】-----架构

【scrapy学习】-----架构

组件

  • ENGINE:负责控制数据流在系统中所有组件中流动,并在相关动作发生时触发事件。
  • SCHEDULER(调度器):从引擎接受request并将它们入队,以便之后引擎请求它们时提供给引擎。
  • DOWNLOADER(下载器):负责获取页面数据并提供给引擎,而后提供给spider。
  • SPIDERS(爬虫):用于分析response并提供item(即获得的item)或额外跟进的URL的类,每个spider负责处理一个特定网站。
  • ITEM PIPELINE(管道):负责处理被spider提取出来的item,典型的处理有清理、验证及持久化(例如存取到数据库中)。
  • Downloader middlewares(下载器中间件):下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的response,其提供了一个简便的机制,通过自定义代码来扩展scrapy功能。
  • Spider middlewares(spider中间件):spider中间件是在引擎及spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items及requests),其提供了一个简便的机制,通过自定义代码来扩展scrapy功能。

数据流向

  1. scrapy数据流由执行引擎(engine)控制,其基本过程为:
  2. 引擎从spider中获取到初始requests;
  3. 引擎将该requests放入调度器,并请求下一个要爬取的requests;
  4. 调度器返回下一个要爬取的URL给引擎,引擎将URL通过下载中间件(请求request方向)转发给下载器(Downloader);
  5. 一旦页面下载完毕,下载器生成一个该页面的response,并将其通过下载中间件(返回response方向)发送给引擎;
  6. 引擎从下载器中接收到response并通过spider中间件(输入方向)发送给spider处理;
  7. spider处理response并返回爬取到的item及(跟进的)新的request给引擎;
  8. 引擎将(spider返回的)怕渠道的item给item pipeline,将(spider返回的)request给调度器;
  9. (从第二步)重复直到调度器中没有更多的request,引擎关闭该网站;