Scrapy架构(各组件的功能)及Scrapy引擎控制数据流的过程

  1. Scrapy架构图(绿线是数据流向):

  

  □ Scrapy引擎(Engine):引擎负责控制数据流在系统的所有组件中流动,并在相应动作发生时触发事件。
  □ 调度器(Scheduler):调度器从引擎接收Request并将它们入队,以便以后引擎请求reqeust提供给引擎。
  □ 下载器(Downloader):下载器负责获取页面数据提供给引擎,而后提供给Spider。
  □ Spider:Spider负责处理所有Response,从中分析提取数据,获取Item字段所需要的数据,并将需要跟进的URL提交给引擎,再次进入调度器。
  □ Item Pipeline:Item Pipeline负责处理被Spider提取出来的Item。并进行后期处理(详细分析、过滤、存储等),典型的处理有:清理验证及持久化(例如存储到数据库中)。
  □ 下载器中间件(Doenloader middlewares):下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的Response。其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。
  □ Spider中间件(Spider middlewares)。Spider中间件是在引擎及Spider之间的特定钩子。处理Spdier的输入(response)和输出(Items及Reqeusts)。操作引擎和Spider之间的通信。其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。

  2. Scrapy引擎控制数据流过程:

    ⑴ 引擎打开一个网站(open a domain),找到处理该网站的Spider并向给Spider请求第一个要爬取的URL。
    ⑵ 引擎从Spider中获取到第一个要爬取的URL,并通过调度器以Request进行调度。
    ⑶ 引擎向调度器请求下一个要爬取的URL。
    ⑷ 调度器返回下一个要爬取的URL给引擎,引擎将URL通过下载中间件(请求(request)方向)转发给下载器。
    ⑸ 一旦页面下载完毕,下载器生成该页面的Response,并将其通过下载中间件(返回(response)方向)发送给引擎。
    ⑹ 引擎从下载器中接收到Response,并通过Spider中间件(输入方向)发送给Spider处理。
    ⑺ Spider处理Response,并返回爬取到的Item及(跟进的)新的Request给引擎。
    ⑻ 引擎将(Spider返回的)爬取到的Item给Item Pipeline,将(Spider返回的)Request给调度器。
    ⑼ 重复( 从⑵ 开始 )直到调度器中没有更多的Request。引擎关闭该网站。

  

  

最新文章

  1. s:if 判断
  2. spring.net (1) 概念-控制反转(又名依赖注入)
  3. HDU 5791 Two DP
  4. BZOJ3172 后缀数组
  5. win7电脑安装wamp出现httpd.exe无法找到组件MSVCR100.dll的解决办法
  6. 使用C#读取XML节点,修改XML节点
  7. HDU FatMouse's Speed 基本DP
  8. oracle存储过程代码覆盖率统计工具
  9. Jmeter对基于websocket协议的压力测试
  10. django系列7:修改404页面展示,优化模板,降低urlconf和模板之间的耦合,命名app将模板和app绑定
  11. pytorch例子学习-DATA LOADING AND PROCESSING TUTORIAL
  12. CF1105E Helping Hiasat
  13. 问题描述: fatal error: 'XCTest/XCTest.h' file not found
  14. class装载原理
  15. logstash收集Nginx日志,转换为JSON格式
  16. crontab 切割日志
  17. Tomcat 8.5 基于 Apache Portable Runtime(APR)库性能优化
  18. SqlServer——for xml path
  19. STL学习笔记(变序性算法)
  20. 06 nginx Location详解之精准匹配

热门文章

  1. 668. Kth Smallest Number in Multiplication Table
  2. CodeForces 689C【二分】
  3. java日期时间处理集合
  4. DMOJ IOI '17 P3 - Toy Train【拓扑排序】
  5. 理解:return、break、continue区别
  6. 3.Python自我修炼(升仙中....整数,布尔值,字符串,for循环)
  7. 企业级应用,如何实现服务化五(dubbo综合案例)
  8. 小试JVM工具
  9. 转 java ClassLoader
  10. BZOJ2152聪聪可可