1. 引言

本文简单讲解一下Scrapy的架构。没错,GooSeeker开源的通用提取器gsExtractor就是要集成到Scrapy架构中,最看重的是Scrapy的事件驱动的可扩展的架构。除了Scrapy,这一批研究对象还包括ScrapingHub,Import.io等,把先进的思路、技术引进来。

请注意,本文不想复述原文内容,而是为了开源Python爬虫的发展方向找参照,而且以9年来开发网络爬虫经验作为对标,从而本文含有不少笔者主观评述,如果想读Scrapy官方原文,请点击Scrapy官网的Architecture。

2. Scrapy架构图

Spiders就是针对特定目标网站编写的内容提取器,这是在通用网络爬虫框架中最需要定制的部分。使用Scrapy创建一个爬虫工程的时候,就会生成一个Spider架子,只需往里面填写代码,按照它的运行模式填写,就能融入Scrapy整体的数据流中。GooSeeker开源网络爬虫的目标是节省下程序员一半以上的时间,关键就是提高Spider的定义和测试速度,解决方案参看《1分钟快速生成网页内容提取器》,让整个Scrapy爬虫系统实现快速定制的目标。

3. Scrapy的数据流(Data Flow)

Scrapy中的数据流由执行引擎控制,下面的原文摘自Scrapy官网,我根据猜测做了点评,为进一步开发GooSeeker开源爬虫指示方向:

The Engine gets the first URLs to crawl from the Spider and schedules

them in the Scheduler, as Requests.

URL谁来准备呢?看样子是Spider自己来准备,那么可以猜测Scrapy架构部分(不包括Spider)主要做事件调度,不管网址的存储。看起来类似GooSeeker会员中心的爬虫罗盘,为目标网站准备一批网址,放在罗盘中准备执行爬虫调度操作。所以,这个开源项目的下一个目标是把URL的管理放在一个集中的调度库里面

The Engine asks the Scheduler for the next URLs to crawl.

看到这里其实挺难理解的,要看一些其他文档才能理解透。接第1点,引擎从Spider中把网址拿到以后,封装成一个Request,交给了事件循环,会被Scheduler收来做调度管理的,暂且理解成对Request做排队。引擎现在就找Scheduler要接下来要下载的网页地址

The Scheduler returns the next URLs to crawl to the Engine and the

Engine sends them to the Downloader, passing through the Downloader

Middleware (request direction).

从调度器申请任务,把申请到的任务交给下载器,在下载器和引擎之间有个下载器中间件,这是作为一个开发框架的必备亮点,开发者可以在这里进行一些定制化扩展

Once the page finishes downloading the Downloader generates a Response

(with that page) and sends it to the Engine, passing through the

Downloader Middleware (response direction).

下载完成了,产生一个Response,通过下载器中间件交给引擎。注意,Response和前面的Request的首字母都是大写,虽然我还没有看其它Scrapy文档,但是我猜测这是Scrapy框架内部的事件对象,也可以推测出是一个异步的事件驱动的引擎,对于高性能、低开销引擎来说,这是必须的

The Engine receives the Response from the Downloader and sends it to

the Spider for processing, passing through the Spider Middleware

(input direction).

再次出现一个中间件,给开发者足够的发挥空间

The Spider processes the Response and returns scraped items and new

Requests (to follow) to the Engine.

每个Spider顺序抓取一个个网页,完成一个就构造另一个Request事件,开始另一个网页的抓取

The Engine passes scraped items and new Requests returned by a spider

through Spider Middleware (output direction), and then sends processed

items to Item Pipelines and processed Requests to the Scheduler.

引擎作事件分发

The process repeats (from step 1) until there are no more requests

from the Scheduler.

持续不断地运行

4. 接下来的工作

接下来,我们将进一步研读Scrapy的文档,实现GooSeeker开源Python爬虫与Scrapy的集成

5. 文档修改历史

2016-06-11:V1.0,首次发布

python的scramy架构_Scrapy的架构初探相关推荐

  1. 支持图灵架构和安培架构的TensorFlow Python库

    自己编译的,支持图灵(Turing)架构RTX20系列显卡以及安培(Ampere)架构RTX30系列显卡.需要CUDA11.CUDNN8.Python3.7,已测试通过可训练可推理,使用时如遇见问题可 ...

  2. python是商业组织吗_基于Python的电子商务系统的弹性架构与思考

    DOI:10. 19392 / j. cnki. 1671-7341. 201815075 基于 Python 的电子商务系统的弹性架构与思考 谢钟扬 湖南软件职业学院 湖南湘潭 411100 摘 要 ...

  3. python架构师是做什么的_什么是架构师?架构师应该具备什么样的能力?

    前段时间网上最流行的三个问题:" 我是谁?"." 我从哪里来?"." 要到哪里去?".这三个问题不只是网上流行的问题也是哲学家们最常思考的问 ...

  4. python cs开发框架_用Python编写一个简单的CS架构后门的方法

    用Python编写一个简单的CS架构后门的方法 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  用Python编写一个简单的CS架构后门的方法.txt ] (友情 ...

  5. 一文了解四种软件架构:Serverless架构、微服务架构、分布式架构、单体架构

    如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存.晋升空间.这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展知识面. 一.单体架构 单体架构 ...

  6. 一文搞懂各种架构(业务架构、应用架构、数据架构...

    01 什么是架构和架构本质 02 架构分层和分类 03 架构的级别 04 应用架构的演进 05 衡量架构的合理性 06 常见架构误区 07 架构知识体系 01 什么是架构和架构本质 在软件行业,对于什 ...

  7. 软件架构万字漫谈:业务架构、应用架构与云基础架构

    软件架构万字漫谈:业务架构.应用架构与云基础架构 本部分节选自<软件架构设计> 软件开发就是把一个复杂的问题分解为一系列简单的问题,再把一系列简单的解决方案组合成一个复杂的解决方案.而软件 ...

  8. 浅谈系统架构设计-从架构设计原理、架构设计原则、架构设计方法展开

    我们工作中一直强调要做架构设计.系分,最近前端同学在追求前端质量提升的时候,也在进行架构设计.前端系分的推广,那到底什么是架构设计和系分?该怎么做架构设计和系分?本文尝试对架构设计进行全面的介绍和分享 ...

  9. 【218】CS架构和BS架构以及数据放在服务端和客户端的利与弊?

    ♣ 题目部分(原文见公众号:python宝) python宝 https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU5NjI ...

最新文章

  1. 让机器听懂人话的自然语言处理技术究竟神奇在哪里?
  2. 魔法照片pascal程序
  3. c语言strlren函数的原代码,VB常用函数
  4. 如何用管程实现生产者消费者问题?
  5. 推荐一个css帮助手册的版本 同时提供chm和在线
  6. tomcat使用线程池配置高并发连接
  7. 最大k乘积的时间复杂度_惊,我还不会算时间复杂度!
  8. 6m缓存和8m缓存差距_R5 3600和R5 3600X性能差距大吗?Ryzen5 3600和3600X区别对比评测(转)...
  9. dbf转成excel_dbf转excel工具(DbfToExcel) v1.2 免费版
  10. 你有全面了解过LIMS系统吗?
  11. C/C++文件指针偏移
  12. JAVA毕设项目基于vue框架的疫情防控知识在线答题系统设计与实现(java+VUE+Mybatis+Maven+Mysql)
  13. 618手机争夺战:5G时代首场大考,荣耀再度领跑
  14. 什么 ? 陪玩都月入过忘拉~这不得python采集一下
  15. 运作团购渠道,如何寻找团购客户(一)?
  16. 安卓模拟器设置网速和延迟
  17. 头条小程序,小游戏头像授权报错
  18. 视频教程-19全新mysql教程零基础入门实战精讲mysql视频DBA数据库视频教程SQL教程-MySQL
  19. new一个对象的时候发生了什么?
  20. 人事面试100问(3)

热门文章

  1. 将tif文件转化为png文件 Python3
  2. Part1_1 pycharm的一些基础设置
  3. R语言-解决问题:程辑包‘xxx’是用R版本3.3.4 来建造的
  4. 【机器学习PAI实践五】机器学习眼中的《人民的名义》
  5. lucene源码分析(1)基本要素
  6. 京东应用架构设计与治理
  7. 四层和七层负载均衡的区别介绍--转
  8. url rewrite优化url的可读性
  9. 【Python】merge:数据规整化:清理、转换、合并、重塑
  10. 中央纪委网站:​深度关注 | 元宇宙如何改写人类社会生活