简单分布式爬虫——第四弹:关于简单分布式爬虫的一点想法
在前面的三讲
简单分布式爬虫——第一弹:了解分布式爬虫结构
简单分布式爬虫——第二弹:masterSpider的实现
简单分布式爬虫——第三弹:nodeSpider的实现
当中,我们从头打造了一个简单的主从分布式爬虫,在这里做个简单的总结,为了清晰描述爬虫流程,借助于如下这张经典的爬虫框架图:

上图适用于常规的爬虫,也适用于分布式爬虫,区别在于是否有独立的爬虫调度器来协调后续各部分。分布式爬虫就是将爬虫调度器独立出来由一台主机实现,而将具体爬取工作交由从机来完成,主机仅负责任务调度。
在第一讲中我们探讨过这种主从式爬虫存在的缺陷:整个爬虫性能受限于masterSpider,尤其是当nodeSpider数量增多时。那么如何应对这种缺陷?一个思路是我们最简化masterSpider的工作量,将除了url管理之外的其他工作完全交由从机完成,也就是从机需要完成url内容获取、解析以及数据保存。当然这种方法并不能大幅提升爬虫性能,如果对爬虫性能有更高要求就要考虑其他形式的爬虫框架,不过,对于一般来讲,这种框架也足够应对。
另外,这里的分布式爬虫只是提供了一个最基本的雏形,在实际应用上还可以加以扩展,比如现在很多网站都采取了反爬技术,其中一条就是限制一段时间内IP访问次数,这种情况下常用的方法就是利用代理IP来爬取。那么我们就可以在这个框架的基础上增加IP代理爬取,所有的代理都由masterSpider进行管理,另开一个网络队列管理代理IP,nodeSpider从网络队列一方面获取url另一方面获取代理IP,利用代理来爬取网站,同时可以将代理IP的可用性反馈给masterSpider,由masterSpider进行代理IP的管理(去除无效代理等)。
豆瓣图书api爬虫是本人的一个练手项目,给定书名利用豆瓣api进行图书检索,并保存图书信息,由于api限定了每个IP的访问频次(100次/小时),所以这里用到了代理IP进行爬取。