手把手教你搭建一个基于Java的分布式爬虫系统
在不用爬虫框架的情况下,我经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似 MySQL、HBase 等。
因为此系统基于面向接口的编码思想来开发,所以具有一定的扩展性,有兴趣的朋友直接看一下代码,就能理解其设计思想。
虽然代码目前来说很多地方还是比较紧耦合,但只要花些时间和精力,很多都是可抽取出来并且可配置化的。
因为时间的关系,我只写了京东和苏宁易购两个网站的爬虫,但是完全可以实现不同网站爬虫的随机调度,基于其代码结构,再写国美、天猫等的商品爬取,难度不大,但是估计需要花些时间和精力。
因为在解析网页的数据时,比如我在爬取苏宁易购商品的价格时,价格是异步获取的,并且其 API 是一长串的数字组合,我花了几个小时的时间才发现其规律,当然也承认,我的经验不足。
这个系统的设计,除了基本的数据爬取以外,更关注以下几个方面的问题:
如何实现分布式?同一个程序打包后分发到不同的节点运行时,不影响整体的数据爬取。
如何实现 URL 随机循环调度?核心是针对不同的顶级域名做随机。
如何定时向 URL 仓库中添加种子 URL?达到不让爬虫系统停下来的目的。
如何实现对爬虫节点程序的监控,并能够发邮件报警?
如何实现一个随机 IP 代理库?目的跟第 2 点有点类似,都是为了反反爬虫。
下面会针对这个系统来做一个整体的基本介绍,我在代码中都有非常详细的注释,有兴趣的朋友可以参考一下代码,最后我会给出一些我爬虫时的数据分析。
原文链接
还没有评论,来说两句吧...