scrapy框架结构图:

组成部分介绍:

  • Scrapy Engine: 
    负责组件之间数据的流转,当某个动作发生时触发事件

  • Scheduler: 
    接收requests,并把他们入队,以便后续的调度

  • Downloader: 
    负责抓取网页,并传送给引擎,之后抓取结果将传给spider

  • Spiders: 
    用户编写的可定制化的部分,负责解析response,产生items和URL

  • Item Pipeline: 
    负责处理item,典型的用途:清洗、验证、持久化

  • Downloader middlewares: 
    位于引擎和下载器之间的一个钩子,处理传送到下载器的requests和传送到引擎的response(若需要在Requests到达Downloader之前或者是responses到达spiders之前做一些预处理,可以使用该中间件来完成)

  • Spider middlewares: 
    位于引擎和抓取器之间的一个钩子,处理抓取器的输入和输出 
    (在spiders产生的Items到达Item Pipeline之前做一些预处理或response到达spider之前做一些处理)

Scrapy中的数据流:

  • Scrapy中的数据流由执行引擎控制,其过程如下: 
    1. 引擎打开一个网站(open a domain),找到处理该网站的spider,并向该spider请求第一个要爬取的url(s);
    2. 引擎从spider中获取到第一个要爬取的url并在调度器(scheduler)以requests调度;
    3. 引擎向调度器请求下一个要爬取的url;
    4. 调度器返回下一个要爬取的url给引擎,引擎将url通过下载器中间件(请求requests方向)转发给下载器(Downloader);
    5. 一旦页面下载完毕,下载器生成一个该页面的responses,并将其通过下载器中间件(返回responses方向)发送给引擎;
    6. 引擎从下载器中接收到responses并通过spider中间件(输入方向)发送给spider处理;
    7. spider处理responses并返回爬取到的Item及(跟进的)新的resquests给引擎
    8. 引擎将(spider返回的)爬取到的Item给Item Pipeline,将(spider返回的)requests给调度器;
    9. (从第二部)重复直到(调度器中没有更多的request)引擎关闭该网站

中间件的编写:

    • down loader middle ware – 查看文档151页

    • spider middle wares – 查看文档162页

scrapy框架解读--深入理解爬虫原理的更多相关文章

  1. 基于Scrapy框架的Python新闻爬虫

    概述 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地 详细 代码下载:http://www.demoda ...

  2. 使用scrapy框架做赶集网爬虫

    使用scrapy框架做赶集网爬虫 一.安装 首先scrapy的安装之前需要安装这个模块:wheel.lxml.Twisted.pywin32,最后在安装scrapy pip install wheel ...

  3. Scrapy框架实战-妹子图爬虫

    Scrapy这个成熟的爬虫框架,用起来之后发现并没有想象中的那么难.即便是在一些小型的项目上,用scrapy甚至比用requests.urllib.urllib2更方便,简单,效率也更高.废话不多说, ...

  4. Scrapy框架解读

    1. Scrapy组件a. 主体部分i. 引擎(Scrapy):处理整个系统的数据流处理,触发事务(框架核心)ii. 调度器(Scheduler):1) 用来接受引擎发过来的请求, 压入队列中, 并在 ...

  5. 基于Scrapy框架的增量式爬虫

    概述 概念:监测 核心技术:去重 基于 redis 的一个去重 适合使用增量式的网站: 基于深度爬取的 对爬取过的页面url进行一个记录(记录表) 基于非深度爬取的 记录表:爬取过的数据对应的数据指纹 ...

  6. 网络爬虫第五章之Scrapy框架

    第一节:Scrapy框架架构 Scrapy框架介绍 写一个爬虫,需要做很多的事情.比如:发送网络请求.数据解析.数据存储.反反爬虫机制(更换ip代理.设置请求头等).异步请求等.这些工作如果每次都要自 ...

  7. Scrapy框架学习笔记

    1.Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网 ...

  8. python高级之scrapy框架

    目录: 爬虫性能原理 scrapy框架解析 一.爬虫性能原理 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢. 1.同步执行 impor ...

  9. 都是干货---真正的了解scrapy框架

    去重规则 在爬虫应用中,我们可以在request对象中设置参数dont_filter = True 来阻止去重.而scrapy框架中是默认去重的,那内部是如何去重的. from scrapy.dupe ...

随机推荐

  1. IOS数据持久化之归档NSKeyedArchiver, NSUserDefaults,writeToFile

    //2.文件读写 //支持:NSString, NSArray , NSDictionay, NSData //注:集合(NSArray, NSDictionay)中得元素也必须是这四种类型, 才能够 ...

  2. MFC DLL获取当前路径

    .首先定义此获取模块的静态方法 #if _MSC_VER >= 1300 // for VC 7.0 // from ATL 7.0 sources #ifndef _delayimp_h ex ...

  3. Virtualbox报错------>make sure the kernel module has been loaded successfully

    错误描述 很久没有用virtualbox了,今天打算在virtualbox上安装一个Ubuntu系统的时候,新建好Ubuntu后启动的时候,直接报错: Cannot access the kernel ...

  4. Vue(1)- es6的语法、vue的基本语法、vue应用示例,vue基础语法

    一.es6的语法 1.let与var的区别 ES6 新增了let命令,用来声明变量.它的用法类似于var(ES5),但是所声明的变量,只在let命令所在的代码块内有效.如下代码: { let a = ...

  5. mysql乱码修改character_set_server

    [mac] 1.使用任何一个客房端或者命令行查询一下编码,俺用的是MySQLWorkbench SHOW VARIABLES LIKE 'character_set_%'; 2.发现编码是charac ...

  6. Hbase 学习笔记1----shell

    Hbase 是一个分布式的.面向列的开源数据库,其实现是建立在google 的bigTable 理论之上,并基于hadoop HDFS文件系统.     Hbase不同于一般的关系型数据库(RDBMS ...

  7. JavaScript 函数,math对象,Date对象 序列化 总结

    函数 函数定义 // 普通函数定义 function f1() { console.log("Hello world!"); } // 带参数的函数 function f2(a, ...

  8. 8月白盒测试课程 - C C++ 白盒测试实践

    8月白盒测试课程 - C C++ 白盒测试实践http://gdtesting.cn/news.php?id=36

  9. 用HAProxy和KeepAlived构建高可用的反向代理系统

    对于访问量较大的网站来说,随着流量的增加单台服务器已经无法处理所有的请求,这时候需要多台服务器对大量的请求进行分流处理,即负载均衡.而如果实现负载均衡,必须在网站的入口部署服务器(不只是一台)对这些请 ...

  10. iOS导入高德地图出现缺失armv7--"Undefined symbols for architecture armv7"

    在已有项目中使用pod导入高德地图,报了以下错误: ld: warning: directory not found for option '-L/Users/paul/iOS/yun-hui-yi/ ...