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。引擎关闭该网站。

  

  

Scrapy-架构的更多相关文章

  1. scrapy架构初探

    scrapy架构初探 引言 Python即时网络爬虫启动的目标是一起把互联网变成大数据库.单纯的开放源代码并不是开源的全部,开源的核心是"开放的思想",聚合最好的想法.技术.人员, ...

  2. Scrapy架构概述

    Scrapy架构概述 1, 从最初自己编写的spiders,获取到start_url,并且封装成Request对象. 2,通过engine(引擎)调度给SCHEDULER(Requests管理调度器) ...

  3. scrapy架构简介

    一.scrapy架构介绍 1.结构简图: 主要组成部分:Spider(产出request,处理response),Pipeline,Downloader,Scheduler,Scrapy Engine ...

  4. 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图

    第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scra ...

  5. Python -- Scrapy 架构概览

    架构概览 本文档介绍了Scrapy架构及其组件之间的交互. 概述 接下来的图表展现了Scrapy的架构,包括组件及在系统中发生的数据流的概览(绿色箭头所示). 下面对每个组件都做了简单介绍,并给出了详 ...

  6. 二十四 Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图

    1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scrapy架构源码分析图

  7. scrapy架构与目录介绍、scrapy解析数据、配置相关、全站爬取cnblogs数据、存储数据、爬虫中间件、加代理、加header、集成selenium

    今日内容概要 scrapy架构和目录介绍 scrapy解析数据 setting中相关配置 全站爬取cnblgos文章 存储数据 爬虫中间件和下载中间件 加代理,加header,集成selenium 内 ...

  8. Scrapy架构及其组件之间的交互

    最近在学Python,同时也在学如何使用python抓取数据,于是就被我发现了这个非常受欢迎的Python抓取框架Scrapy,下面一起学习下Scrapy的架构,便于更好的使用这个工具. 一.概述 下 ...

  9. scrapy架构图与执行流程

    概览 本文描述了Scrapy的架构图.数据流动.以及个组件的相互作用 架构图与数据流 上图中各个数字与箭头代表数据的流动方向和流动顺序,具体执行流程如下: 0. Scrapy将会实例化一个Crawle ...

  10. scrapy架构设计分析

    scrapy是一个Python爬虫框架.我们自己用requests也能写爬虫(GET某个URL,然后Parse网页的内容),那么,问题来了,scrapy高明在哪些地方呢?下面就来讨论下这个话题,看看业 ...

随机推荐

  1. HDOJ2579,BFS(三维数组标记)

    三维数组对于我这个萌萌的新手来说真是酷酷的,帅到不行,,, 三维数组前面还看到空间的哪一题HDOJ1240,这一题时间上的标记,更酷了!!! 不说废话了,贴一发代码: #include <std ...

  2. [Xcode 实际操作]九、实用进阶-(20)创建位移关键帧动画:通过添加运动关键点制作位移动画

    目录:[Swift]Xcode实际操作 本文将演示如何通过添加运动关键点的方式,来制作位移动画 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIK ...

  3. javaScript中for-in语句

    for-in语句是一种精准的迭代语句,用来枚举对象的属性 实例: <!DOCTYPE html><html><head> <title>For-In S ...

  4. button 获取 cell

        - (void)cellBtnClicked:(id)sender event:(id)event {     NSSet *touches =[event allTouches];      ...

  5. Ibatis相关

    XML中的#和$的区别 http://shenzhenchufa.blog.51cto.com/730213/254561 poolMaximumActiveConnections和poolMaxim ...

  6. 2018ccpc_hn

    A. Easy h-index #include <iostream> #include <algorithm> #include <cstring> #inclu ...

  7. android 一些常用权限

    <!-- 网络访问权限 --> <uses-permission android:name="android.permission.INTERNET" /> ...

  8. Codeforces Round #533(Div. 2) B.Zuhair and Strings

    链接:https://codeforces.com/contest/1105/problem/B 题意: 给一个字符串和k,连续k个相同的字符,可使等级x加1, 例:8 2 aaacaabb 则有aa ...

  9. python对文件的压缩解压

    python自带的zipfile的模块支持对文件的压缩和解压操作 zipfilp.ZipFile 表示创建一个zip对象 zipfile.ZipFile(file[, mode[, compressi ...

  10. odoo9 部署步详细步骤

    sudo apt-get updatesudo apt-get dist-upgrade 一:安装和配置pg sudo apt-get install  postgresql sudo su - po ...