关闭

scrapy架构设计分析

标签: 架构设计python爬虫
2033人阅读 评论(0) 收藏 举报
分类:

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的架构设计。那么,这样的设计好在哪呢?从功能上看:
* (1) 模块划分清晰,各模块之间无功能重叠,各模块合起来也能表示常用的爬虫功能
* (2) 功能可通过中间件进行扩展
* (3) scheduler可设置调度策略,并发爬多个URL
* (4) 各模块之间不能独立通信,必须由Engine控制,不会出现混乱
* (5) Pipeline模块只处理爬到的关键信息(item),不用处理不关注的大量HTML数据
* (6) 用户只需要关注HTTP response的解析,从回复的HTML中提取关键数据

关于怎么评价一个软件架构,理论派[3]列举了很多要考虑的点,比如质量、功能、性能、可测试、安全性。但从一个架构图,是看不出那么多的,理论派的做法在这里不够practice。来看看微软是怎么看一个架构好不好的[2]。
* (1) Separation of concerns: 各模块功能划分合理,不要有功能交叉。
* (2) Single Responsibility:功能高内聚
* (3) Principle of Least Knowledge:一个模块不需要知道另一个模块的内部细节
* (4) Don’t repeat yourself (DRY).
* (5) Minimize upfront design:每一个模块都是需要的,不要过分设计过多模块

归根结底,好的架构就是要做到模块设计恰到好处,各模块之间高内聚,低耦合。

参考

0
0
查看评论

Python爬虫框架之Scrapy详解

scrapy爬虫安装: 首先,安装Python,pip,然后使用pip安装lxml和scrapy,这样就可以新建scrapy项目了。 然后,在命令行使用scrapy startproject xxx命令新建一个名为xxx的scrapy爬虫项目。 scrapy爬虫内部处理流程:我们在使用scrapy写...
  • c315838651
  • c315838651
  • 2017-05-20 23:25
  • 1723

scrapy创建项目详解

生成项目 scrapy提供一个工具来生成项目,生成的项目中预置了一些文件,用户需要在这些文件中添加自己的代码。 打开命令行,执行:scrapy startproject tutorial,生成的项目类似下面的结构 tutorial/    scrapy.c...
  • zhang19871201
  • zhang19871201
  • 2015-09-19 14:36
  • 14671

scrapy学习笔记——HTML页面解析

一、Scrapy Selectors简介 scrapy提供了本身提供了一种基于XPath和CSS 表达式的选择器,叫做Scrapy Selectors。 XPath是一种类似于层级选择的方式,与JQuery选择器有几分相似之处。 /html/head/title :选择head标签内的title标...
  • ioiol
  • ioiol
  • 2015-07-31 00:22
  • 7385

Scrapy研究探索(三)——Scrapy核心架构与代码运行分析

学习曲线总是这样,简单例子“浅尝”,在从理论+实践慢慢攻破。理论永远是基础,切记“勿在浮沙筑高台”。 一. 核心架构 关于核心架构,在官方文档中阐述的非常清晰,地址:http://doc.scrapy.org/en/latest/topics/architecture.html。 英文有障碍可查...
  • u012150179
  • u012150179
  • 2014-06-25 16:37
  • 19408

10 scrapy框架解读--深入理解爬虫原理

scrapy框架结构图 Scrapy Engine: 负责组件之间数据的流转,当某个动作发生时触发事件 Scheduler: 接收requests,并把他们入队,以便后续的调度 Downloader: 负责抓取网页,并传送给引擎,之后抓取结果将传给spider Spiders: 用户编写的可...
  • u010155229
  • u010155229
  • 2016-06-01 15:36
  • 2772

Scrapy爬虫(三):scrapy架构及原理

Scrapy爬虫(三):Scrapy原理Scrapy爬虫三Scrapy原理 scrapy爬虫尝鲜 scrapy data flow流程图 scrapy项目结构scrapy爬虫尝鲜scrapy现在已经完美支持python3+,所以后面的实例我都会使用python3+的环境。首先我们来尝下鲜,下面的代码...
  • yancey_blog
  • yancey_blog
  • 2016-12-26 19:01
  • 4201

基于scrapy框架爬虫学习小结

在之前完全没有接触过爬虫的我,甚至都不知道爬虫是何物,然而在数据挖掘课程第二次大作业中却要我们小组直接用scrapy框架做一个爬取朋友圈的爬虫,一接到作业的我们马上就懵逼了,别说是scrapy了,我们就连什么是爬虫,爬虫原理是什么都一无所知,突然就要爬微信朋友圈,还要两周内,开什么玩笑。但是怎么也得...
  • qq_29245097
  • qq_29245097
  • 2016-06-04 23:29
  • 9359

scrapy 架构详解

一、概述 下图显示了Scrapy的大体架构,其中包含了它的主要组件及系统的数据处理流程(绿色箭头所示)。下面就来一个个解释每个组件的作用及数据的处理过程。 二、组件 1、Scrapy Engine(Scrapy引擎) Scrapy引擎是用来控制整个系统的数据处理流程,...
  • u010145988
  • u010145988
  • 2013-12-24 11:23
  • 851

Scrapy爬虫架构图解

这就是整个Scrapy的架构图了; Scrapy Engine: 这是引擎,负责Spiders、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等等!(像不像人的身体?)Scheduler(调度器): 它负责接受引擎发送过来的requests请求,并按照一...
  • Gooooa
  • Gooooa
  • 2017-06-22 16:16
  • 1119

scrapy架构初探

scrapy架构初探引言 Python即时网络爬虫启动的目标是一起把互联网变成大数据库。单纯的开放源代码并不是开源的全部,开源的核心是“开放的思想”,聚合最好的想法、技术、人员,所以将会参照众多领先产品,比如,Scrapy,ScrapingHub,import io等。 ...
  • qq_34162294
  • qq_34162294
  • 2017-05-16 21:20
  • 1484
    个人资料
    • 访问:551892次
    • 积分:5525
    • 等级:
    • 排名:第5740名
    • 原创:138篇
    • 转载:2篇
    • 译文:5篇
    • 评论:98条
    个人联系信息
    个人开源项目:https://github.com/ybdesire。联系专家帮助:(1)机器学习,深度学习,NLP,数据挖掘,数据科学,图像识别(2)企业技术顾问,培训(3)微信:crazygoodluck,email:ybdesireATgmailDOTcom,微信公众号:自动话(说话的话)
    最新评论