scrapy架构设计分析
scrapy是一个Python爬虫框架。我们自己用requests也能写爬虫(GET某个URL,然后Parse网页的内容),那么,问题来了,scrapy高明在哪些地方呢?下面就来讨论下这个话题,看看业界通用的爬虫是怎么设计的。
从[1]可得scrapy架构图。它由5个核心模块组成。
5个模块功能
- (1) 最重要的模块是Engine:它是数据流的指挥官,负责控制数据流(控制各个模块之间的通信);
- (2) scheduler:负责将Engine提交的URL排成一个队列;
- (3) spider:用户自己写的代码放在spider。主要负责HTTP response的解析,从回复的HTML中提取关键数据。
- (4) downloader:负责跟URL对应的server通信,并获取返回的内容。
- (5) item pipeline:负责处理spider提取出来的信息,一般用于做跟DB相关的操作。
2个中间件
中间件是处于两个模块之间的一种特殊hook,它的目的是提供一种简易的机制,通过插拔用户自己写的代码,来扩展新功能。
典型的数据流
- (1) Engine启动,从spider中读出要爬的第一个URL
- (2) Engine将读到的第一个URL送给scheduler
- (3) Engine向scheduler请求下一个要爬的URL
- (4) scheduler从队列中读出一个URL,送给Engine,Engine将这个URL送到downloader
- (5) downloader去GET这个URL,并将HTTP response生成一个Response对象。downloader将生成的Response返回给Engine
- (6) Engine将这个Response对象发给spider
- (7) spider处理这个Response对象,提取其中的信息,生成item。还会生成新的请求。并将item和请求送给Engine
- (8) Engine将收到的请求送给scheduler,将收到的item送给item pipline
- (9) 重复步骤(2),直到没有URL需要继续处理
所有的处理流程都需要经过 Scrapy Engine,然后到达下一个流程
源自 http://blog.csdn.net/ybdesire/article/details/51559255
转载于:https://www.cnblogs.com/fly-kaka/p/6856173.html
scrapy架构设计分析相关推荐
- Web API应用架构设计分析(2)
在上篇随笔<Web API应用架构设计分析(1)>,我对Web API的各种应用架构进行了概括性的分析和设计,Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端 ...
- python scrapy框架 简书_python爬虫框架——Scrapy架构原理介绍
说起写爬虫,大多数第一时间想到的就是python了.python语法简洁明了,加上及其丰富好用的库,用它来写爬虫有天然的优势. 之前学python的时候也用requests+lxml写过几个爬虫玩,但 ...
- 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图...
第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲-爬虫和反爬的对抗过程以及策略-scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scra ...
- Saas系统架构的思考,多租户Saas架构设计分析
ToB Saas系统最近几年都很火.很多创业公司都在尝试创建企业级别的应用 cRM, HR,销售, Desk Saas系统.很多Saas创业公司也拿了大额风投.毕竟Saas相对传统软件的优势非常明显. ...
- 网狐棋牌游戏平台服务器架构设计分析[转]
网狐棋牌游戏平台服务器架构设计分析[转] http://blog.csdn.net/weiwangchao_/article/details/7047044 基本设计概念和处理流程 调用模型 模仿CO ...
- 【传智播客郑州校区分享】MyBatis的架构设计分析
[传智播客郑州校区分享]MyBatis的架构设计分析 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBat ...
- 玩转 Scrapy 框架 (二):Scrapy 架构、Request和Response介绍
目录 一.Scrapy 架构及目录源码分析 二.Request 和 Response 介绍 2.1 Request 2.2 Response 三.实例演示 3.1 POST 请求 3.2 GET 请求 ...
- Web API应用架构设计分析(1)
Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端(包括浏览器,手机和平板电脑等移动设备)的框架, ASP.NET Web API 是一种用于在 .NET Framewor ...
- 网狐棋牌游戏平台服务器架构设计分析
调用模型 模仿COM组件接口模式,利用面向对象思想多态性polymorphism,调用方保存着被调用方的基础接口指针(interface or sink钩子)(Pure Virtual Functio ...
最新文章
- C#中如何获取注册表信息
- 路由与交换大作业pkt_干货 | 交换机“练功大法”——略有小成(一)
- [Javascipt] Immediately-Invoker 2
- linux安装redis并在后台启动
- C/C++ 指针和数组
- 身体好不是锻炼出来的
- Linux下关于gcc、vim、readelf、rpm、yum、彩色进度条的问题
- mac php5.6 gd 扩展,mac 编译安装php5.6.40
- JSP+JavaBean+Servlet工作原理实例讲解
- 有道翻译与VS2010滚动栏自动反弹冲突问题
- Linux 下SVN安全及权限配置
- echarts图广东和福建地图上城市坐标
- 在Ubuntu中搭建嵌入式Linux开发环境
- matlab生成tiff,MATLAB中自定义栅格数据地理坐标并写出数据到tiff文件
- 解决安装MATLAB2018a后出现License Manager Error -8的问题
- 2019 Multi-University Training Contest 3:Yukikaze and Demons(点分治 + exgcd)
- UE4--用插件加载第三方库lib/dll(lsl)
- Linux网络编程8——线程池模型
- echarts添加背景图片,背景色及水印
- 怎样在word中画横线
热门文章
- Oracle大型数据库在AIX UNIX上的实战详解
- Linux服务器傻瓜安装(图解下)(4)
- 判断一个文本文件的编码格式
- 简单而又完整的Makefile-转
- android studio绑定数据库表,Android:数据绑定库的使用
- python 连接 oracle 循环,4.使用cx_Oracle连接Oracle(高级篇)
- kafka python client:PyKafka vs kafka-python
- RedHat Linux安装Informix v10.x(图文详解)
- 用SignalR 2.0开发客服系统[系列5:使用SignalR的中文简体语言包和其他技术点]
- [原创]商品条码管理与条码打印管理软件的实现