简单分布式爬虫——第一弹:了解分布式爬虫结构

学习爬虫有段时间了,期间爬过微博、糗事百科、网易云音乐、豆瓣等大大小小的网站,对爬虫也算窥其门径。不论所爬网站是何种类,爬虫的套路无非几步:目标网站分析、反爬策略研究、设计爬虫、代码实现、优化。不过一直以来,都是一个.py文件撸到底,并没有考虑性能效率什么的(对效率性能有要求直接上scrapy、pyspider),然而作为一个合格的spider,要不会分布式爬虫那真是笑死人了,所以本博客特开一系列博文学习分布式爬虫。

什么是分布式爬虫?日常用过搜索引擎Google、百度等吧,其实这些搜索引擎都是爬虫,负责从世界各地的网站上爬取内容,当你搜索关键词时就把相关的内容展示给你,只不过他们那都是炒鸡大的爬虫,爬的内容量也超乎想象,然额,这么大的爬虫工作交给一台服务器去完成,即使服务器性能再好怕是也忙不过来,那怎么办?当然是上分布式啊,一台服务器不行,我来100台,什么?100台也不够?说吧,需要多少台!所以当有了一大堆服务器的时候,你就可以用他们协同来完成爬取工作了,世界上网页再多也架不住你成千上万台服务器去爬啊,那么,这里提到的"协同"其实就是用到了分布式的概念:我这么多分布在各地的服务器都是为了完成爬虫工作,彼此得通力协作才行啊,于是就有了分布式爬虫。

分布式爬虫形色多样,无论是我们这次准备徒手撸的简单爬虫还是成熟的爬虫框架scrapy、pyspider亦或是Google百度之类的公司专用爬虫,其基本结构都是差不多的。我们就以简单的主从分布式爬虫讲起。所谓主从模式,就是由一台服务器充当master,若干台服务器充当slave,master负责管理所有连接上来的slave,包括管理slave连接、任务调度与分发、结果回收并汇总等;每个slave只需要从master那里领取任务并独自完成任务最后上传结果即可,期间不需要与其他slave进行交流。这种方式简单易于管理,但是很明显master需要与所有slave进行交流,那么master的性能就成了制约整个系统的瓶颈,特别是当连接上的slave数量庞大的时候,很容易导致整个爬虫系统性能下降。不过这不影响我们的学习,下面对主从分布式爬虫结构进行讲解。

先上一张图:
简单分布式爬虫——第一弹:了解分布式爬虫结构_第1张图片
主从分布式爬虫结构图

这是经典的主从分布式爬虫结构图,图中的控制节点ControlNode就是上面提到的master,爬虫节点SpiderNode就是上面提到的slave。下面这张图展示了爬虫节点slave的执行任务示意图

简单分布式爬虫——第一弹:了解分布式爬虫结构_第2张图片
控制节点执行流程图

这两张图很明了地介绍了整个爬虫框架,我们在这里梳理一下:
1、整个分布式爬虫系统由两部分组成:master控制节点和slave爬虫节点
2、master控制节点负责:slave节点任务调度、url管理、结果处理
3、slave爬虫节点负责:本节点爬虫调度、HTML下载管理、HTML内容解析管理
4、系统工作流程:master将任务(未爬取的url)分发下去,slave通过master的URL管理器领取任务(url)并独自完成对应任务(url)的HTML内容下载、内容解析,解析出来的内容包含目标数据和新的url,这个工作完成后slave将结果(目标数据+新url)提交给master的数据提取进程(属于master的结果处理),该进程完成两个任务:提取出新的url交于url管理器、提取目标数据交于数据存储进程,master的url管理进程收到url后进行验证(是否已爬取过)并处理(未爬取的添加进待爬url集合,爬过的添加进已爬url集合),然后slave循环从url管理器获取任务、执行任务、提交结果......

好了,以上就是简单分布式爬虫整体结构,是不是很简单。
下一讲:打造属于我们自己的爬虫master

参考资料:《Python爬虫开发与项目实战》

你可能感兴趣的:(简单分布式爬虫——第一弹:了解分布式爬虫结构)