• UID11822
  • 登录2017-07-17
  • 粉丝3
  • 关注0
  • 发帖31
  • 主页http://www.gooseeker.com/
  • 金币216枚
社区居民
原创写手
fullerhua 发布于2016-06-12 16:24
0/832

Scrapy的架构初探

楼层直达
Scrapy,Python开发的一个web抓取框架。

1,引言

Python即时网络爬虫启动的目标是一起把互联网变成大数据库。单纯的开放源代码并不是开源的全部,开源的核心是“开放的思想”,聚合最好的想法、技术、人员,所以将会参照众多领先产品,比如,Scrapy,ScrapingHub,Import.io等。

本文简单讲解一下Scrapy的架构。没错,通用提取器gsExtractor就是要集成到Scrapy架构中。

请注意,本文不想复述原文内容,而是为了开源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的文档,实现Python即时网络爬虫与Scrapy的集成。

5,文档修改历史

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

0人打赏
您需要登录后才可以回帖
发表回复
极贡献
技术问答
专题荟萃
程序人生
视觉设计
Android开发
iOS开发
编程语言
前端开发
后端开发
服务器架构
软件测试
运维方案
创业路上



最热文章墙

  • 80963/379   【精品推荐】200多种Android动画效果的强悍框架,太全了,不看这个,再有动画的问题,不理你了^@^

  • 45957/191   情人节福利,程序员表白的正确姿势:改几行代码就变成自己的表白了

  • 45592/0   Python爬虫:常用浏览器的useragent

  • 42133/261   【精品推荐】Android版产品级的音乐播放器源码,功能太强大了,最好的产品原型有木有?

  • 39100/145   省时省力的Android组件群来了,非常棒的原型参考

  • 30574/143   2016抢红包软件及源码

  • 29601/71   原创表白APP,以程序员的姿势备战新年后的7夕,持续完善中!

  • 29488/2   超全!整理常用的iOS第三方资源

  • 24862/161   Android版类似UC浏览器:非常赞,产品级的源码

  • 23074/31   麻省理工的一帮疯子,真的实现了随意操控万物!(绝对黑科技)

  • 22768/26   Android工程师面试题大全

  • 22738/27   2016程序员跳槽全攻略

  • 22092/10   GitHub上排名前50的iOS项目:总有一款你用得着

  • 21089/21   码魂:程序员的牛B漫画

  • 19329/85   Android小而全的博客源码:非常适合全面掌握开发技巧

  • 19328/74   【持续更新中】Android福利贴(二):资料源码大放送

  • 19186/43   一个绚丽的loading动效分析与实现!

  • 19115/10   2016年最全的Android面试考题+答案 精编版

  • 18896/3   吐槽那些程序员的搞笑牛逼注释

  • 17885/45   惊艳的App引导页:背景图片切换加各个页面动画效果

  • 17814/104   Android带弹幕的视频播放器源码,来自大名鼎鼎的Bilibili弹幕网站

  • 17768/82   仿京东商城客户端Android最新版,不错的原型和学习资料

  • 17756/1   iOS 动画总结

  • 17411/25   个人收集的Android 各类功能源代码

  • 16923/5   新一代Android渠道打包工具:1000个渠道包只需要5秒

  • 16896/23   Android福利第三波【Android电子书】

  • 16716/1   iOS中文版资源库,非常全

  • 16712/81   【精品推荐】类似360安全卫士安Android源码:非常赞的产品原型

  • 16655/54   基于瀑布流的美女图片浏览App,有注释的源代码

  • 16520/18   用JavaScript 来开发iOS和Android 原生应用:React Native开源框架中文版来啦

  • 16500/10   女程序员的梦,众网友的神回复

  • 16227/23   珍藏多年的素材,灵感搜寻网站

  • 16222/11   年会上现场review代码是怎么样的体验!

  • 15879/19   65条最常用正则表达式,你要的都在这里了

  • 15001/16   基于Android支付宝支付设计和开发方案

  • 14416/11   有木有这样一张酷图帮你集齐所有git命令超实用

  • 14360/18   什么是真正的黑客:收获12200+Stars,人气远超微软开源VS

  • 14157/47   在线音乐播放器完整版(商用级的源码):非常赞,可听免费高品质专辑

  • 13977/62   【技巧一】搭配Android Studio,如何实现App远程真机debug?

  • 13841/0   GitHub iOS 库和框架Top100 

  • 13689/7   用程序员的姿势抢过年的火车票

  • 13663/7   一张图搞定iOS学习路线,非常全面

  • 13310/10   成为Java顶尖程序员 ,看这11本书就够了

  • 13243/10   微信支付终于成功了(安卓,iOS),在此分享

  • 13124/18   一张图搞定Android学习路线,非常全面

  • 12980/29   【持续更新中】Android福利贴(一):资料源码

  • 12886/4   基于Node.js的强大爬虫,能直接发布抓取的文章哦

  • 12705/4   46 个非常有用的 PHP 代码片段

  • 12161/3   即时通信第三方库

  • 11578/9   流媒体视频直播方案

  • 11549/18   八个最优秀的Android Studio插件

  • 11392/9   B站建开源工作组:APP想支持炫酷弹幕的看过来

  • 11230/2   【精品推荐】高质量PHP代码的50个实用技巧:非常值得收藏

  • 11152/9   烧了5亿美金,这家神秘的公司即将颠覆人类未来!

  • 11084/12   中国黑客的隐秘江湖:攻守对立,顶尖高手月入千万美元

  • 10587/1   基于node-webkit跨平台应用案例集之(一)

  • 10340/6   开箱即用!Android四款系统架构工具

  • 10133/11   十大技巧快速提升Android应用开发性能

  • 10124/4   10款GitHub上最火爆的国产开源项目——可以媲美西半球

  • 10079/2   Android性能优化视频,文档以及工具

  • 返回顶部