1、下图为 Scrapy 框架的组成结构,并从数据流的角度揭示 Scrapy 的工作原理

2、首先、简单了解一下 Scrapy 框架中的各个组件

组       件 描      述 类   型
ENGINE 引擎,框架的核心,其他所有组件在其控制下协同工作  内部组件
SCHEDULER 调度器,负责对 SPIDER 提交的下载请求进行调度 内部组件
DOWNLOADER    下载器,负责下载页面(发送 HTTP 请求/接收 HTP 响应)   内部组件
SPIDER 爬虫,负责提取页面中的数据,并产生对新页面的下载请求  外部组件
MIDDLEWAERE 中间件,负责对 Request 对象和 Response 对象进行处理 可选组件
ITEM PIPELINE 数据管道,负责对爬取到的数据进行处理 可选组件

                 对于用户来说,Spider 是最核心的组件,Scrapy 开发是围绕着 Spider 展开的

3、接下来,看一下框架中的数据流

对     象 描     述
REQUEST    Scrapy 中的 HTTP 请求对象   
RESPONSE  Scrapy 中的 HTTP 响应对象
ITEM 从页面中爬取的一项数据

    Request 和 Response 是 HTTP 协议的术语,即 HTTP 请求和 HTTP 响应,Scrapy 框架中定义了相应的 Request 和 Response 类,这里的 Item 带白哦Spider 从页面中爬取的一项数据

    

4、最后,我们来说明一下以上几种对象在框架中的流动过程

  (1)当 Spider 要爬取某 URL 地址的页面时,需要用该 URL 构造一个 Request 对象,提交给 ENGINE.

  (2)Request 对象随后进入 SCHEDULER 按某种算法进行排队,之后的某个时刻 SCHEDULER 将其出队,送往 DOWNLOADER

  (3)DOWNLOADER 根据Request 对象中的 URL 地址发送一次 HTTP 请求到网站服务器,之后用服务器返回的 HTTP 响应构造出一个 Response 对象,其中包含页面的 HTML 文本

  (4)Response 对象最终会被递交给 SPIDER 的页面解析函数(构造 Request 对象时指定)进行处理,页面解析函数从页面中提取带数据,封装成 Item 提交给 ENGINE,

    item之后被送往 ITEM PIPELINES 进行处理,最终可能由 EXPORTER 易某种数据格式写入文件(csv, json)另一方面,页面解析函数还从页面中提取链接,构造新的

    Request 对象提交给 ENGINE

  理解了框架中的数据流,也就理解了 Scrapy 爬虫的工作原理,如果把框架中的组件比作人体的各个器官,Request 和 Response 对象便是血液,Item 则是代谢产物

最新文章

  1. Spring和Mybatis整合,配置文件
  2. Compound Interest Calculator3.0
  3. mjrefresh源码分析
  4. 设计模式之桥接模式(Bridge)
  5. If-Modified-Since和If-None-Match
  6. Jetty:配置JSP支持
  7. 201521123019 《Java程序设计》第3周学习总结
  8. octave中的一些基本操作
  9. Docker 命令查询
  10. ubuntu 中文设置
  11. Windows7下IIS+php配置教程 http://www.jb51.net/article/113812.htm
  12. 屏蔽win10中文输入法
  13. Ubuntu16.04LTS中使用 apt-get install 出现错误 Could not get lock /var/lib/dpkg/lock 的解决方案
  14. block本质探寻七之内存管理
  15. linux下man手册简介
  16. Mixed Content: The page at 'https://a.t.com/login' was loaded over HTTPS, but requested an insecure stylesheet 非全站https
  17. 教你如何使用理解懒Redis是更好的Redis
  18. 下载pubmed数据
  19. tensorflow Importing Data
  20. H5页面在IOS下不会自动播放音乐的坑

热门文章

  1. 【Struts 基础案例】
  2. 【PAT甲级】1080 Graduate Admission (30 分)
  3. SpringCloud全家桶学习之断路器---Hystrix(五)
  4. MyBatis逆向工程的使用(非插件方式)
  5. P3368 (模板)树状数组2
  6. P1598
  7. ASCII码排序 题解
  8. 1、MyBatis框架底层初涉
  9. 批量导出存储在msdb库的SSIS包
  10. CodeBlocks17.12配置GNU GCC + 汉化