首页 > 程序人生 > 大数据基础技术——爬虫的工具选择
2014
11-11

大数据基础技术——爬虫的工具选择

大数据是神马?怎么样才算拥有一只善良又可爱的大数据?

一种传统的方法是爬取相关的网页,所以咱们今天讲讲爬虫的一些简单知识和可以选择的工具。

爬虫的原理就不必多说了,可以自行Google

首先,应该认真考虑你需要什么样的大数据,也就是你的需求是什么。爬取普通网页、博客、新闻、社交网络还是图片? 貌似咋一看都是爬虫去爬好了,其实不然,细节上的需求可能导致你需要的工具属性不一样。

其次,讲讲笔者用过的一些爬虫工具和他们的特点:
    --- Nutch 很好的爬虫框架,成熟稳定,也广泛用于工业界。
    1. Nutch是基于hadoop的框架的,所以它天生就是分布式的。分布式有啥好处?可以同时利用多台机器来爬取数据。注意,IP对于爬虫来说,是一个重要的资源,大量的爬取访问可能会被网站封杀所以拥有多个IP是很重要的。这也是“分布式”和“多线程”对于爬虫来说的区别。
    2. Nutch是增量式的。Nutch的设计就是可以支持增量的爬取,可以判断网页是否在一段时间内被抓取过,如果抓取了就不会重复抓取。这个能力对于很多种数据来说是很重要的,如新闻等。
    3. Nutch有很多可以定制的插件、机制、策略。笔者认为Nutch非常general,可以用于广泛的用途。
    4. Nutch可以使用多种存储方式,如hbase、mysql等。
    5. 学习成本相对较高。假如你需要定制插件,笔者认为你还是需要了解下Nutch的内部原理和看看Nutch的代码,所以花了半天一天的来学习,是正常的。

    --- Scrapy:  基于python的爬虫框架,轻量级的爬虫,使用python脚本非常方便。
    1. Scrapy非常轻量,所以学习成本很低(相对Nutch来说)。因此特别适合ad-hoc的一次性爬取:举一个例子,你需要爬取www.dianping.com来抽取特定的数据(如餐馆评论),你只需要爬这个网站,也不想经常去爬。那用scrapy就好了,你可以很快在一两个小时内学会,而且python的快速反馈也是很适合轻量级爬虫的。
    2. Scrapy是基于单机的批处理任务。没有分布式,也没有增量。
    3. Scrapy仍然提供了可定制的能力,如爬取的机制、过滤url和继续爬取的策略等。

    -- 自己写:有时候很多网站你需要深度爬取,了解很多领域相关的知识,这个时候自己写一个特定的爬虫反倒是一个正确的选择。那就从http request的相关API开始做吧,比如python的urllib。从小到大自己搭一个简单实用的特定爬虫。

最后讲讲爬虫的一些相关话题:
    1. 美国有一个公司是专门做爬虫的,爬取了很多数据,号称比google还多,然后他提供一些数据服务。
    2. 所谓的Deep Web是很难爬取的。比如很多网站是使用javascript或者用户同后台数据库的交互来提供前台页面。这个时候很难爬取,据说Google有一些牛逼的爬虫是模拟javascript的输入来获取这些数据,有兴趣的同学自行参考文献吧。
    3. Social Networks都很难爬取。首先,这些网站对爬虫都很不友好,他们无意把数据提供给搜索引擎。然后,非要爬取的话,很多时候需要用户登陆,而且要很小心被封杀。爬取的过程还需要注意使用代理IP,以及DNS缓存以防止本地DNS被你的爬虫搞挂。
    4. Crowd Sourcing Crawler到是一个有点意思的东西。所以的Crowd Sourcing Crawler,就是使用群众们的机器和IP,来爬取特定的网站。这可能到是解决问题2和3的一个办法。

就这样,希望对同学们有所帮助。

转自:http://blog.sina.com.cn/forkroad

编程技巧