天天看点

有哪些好用的互联网数据抓取,数据采集,页面解析工具?

1、 互联网刚兴起的时候,数据索引是个大问题,当时Yahoo的分类页面着实火了一阵子。

2、随着互联网数据量越来越大,Google,百度等搜索引擎火了起来。这个阶段,几乎没有比搜索引擎更火的技术了,连带分词技术都火得一塌糊涂。紧接着, Nutch等开源搜索引擎也横空出世,让人一见倾心!很多人,很多公司都尝试过用它们来做商业用途。但这些东西牛叉是牛叉,真正用起来就不总那么顺畅。一是不太稳定;二是过于复杂,二次开发,使之吻合自己的需求,非常困难。

3、既然通用搜索引擎搞起来没那么方便,那就搞简单点的,定向的。于是爬虫技术兴起,酷讯算是其中做得比较成功的。依赖于其技术,后来搞了99房,进而搞了今日头条,一路风光。

4、随着搞互联网的人越来越多,很多人由于不同的需求,的确要从网上抓取数据,但希望能简单点,开发成本低点,速度快点。于是很多开源的工具出现了。CURL有段时间被用得很多,HTMLCXX,HTMLParser等HTML解析工具也被广泛使用。火车头干脆就做成了傻瓜式的,不需要开发能力,只需要配置好就能自动跑起来。

5、发展到现在,特别随着移动互联网的兴起,由于各类不同的需求,数据抓取需求依然旺盛。网上用于数据抓取的工具,开源代码,一抓一大把,jsoup,Spynner等等。但数据抓取依然是个稍有难度的事情,原因有四:一、每个公司的需求都不一样,使得产品化非常困难。二、WEB页面本身非常复杂与混乱,JavaScript更是使得抓取不可控;三、大部分的工具(开源库)都有相当大的局限性,扩展不方便,数据输出不稳定,不太合适于严肃的商业应用;四、基于开源库或工具开发完成自己的需求,依然有一定难度,且工作量不少。

6、所以,一个好的抓取工具(开源库),最好具备如下特性:一、简单。体系不要太复杂,接口最好能一目了然,以便降低开发成本;二、功能强大。最好是网页上能看到的数据,包括JavaScript输出的,都能抓取到。数据抓取的很大一部分工作,都是在寻找数据。比如:地理坐标数据没有,导致要花很大精力去补全这些数据;三、方便。最好地能提供开发库,如何抓取,如何布署,可以控制,而不是被陷入到一整套体系中去;四、灵活。可快速实现各种需求,即可以快速抓取简单数据,也可以搭建较复杂的数据应用;五、稳定。能输出稳定的数据,不至于天天调BUG,找数据。不至于需求稍稍复杂点,数据量稍稍大点的时候,需要做大量的二次开发,消耗大量的人力与时间。六、可集成。能快速地借助现有技术力量,开发环境,迅速建立数据系统。七、可控。企业应用都是长期的积累,如果数据,流程位于第三方之手,则可控性较差,需求变更响应慢,风险大。八、支持结构化。能提供一些特性,帮助开发者实现结构化数据的抽取与关联,以避免为每个页面写数据解析器。

很多公司,都在数据抓取上投入了不少的精力,但效果往往不太好,可持续开发能力也比较差。这基本上都是由于选用的基础工具不理想导致的。所以,我们来梳理一下现在可用的一些数据抓取工具和开源库。比较一下它们的优劣,为开发者选型做一个参考。

一、 体系类:

这类工具或开源库,提供了一整套体系,包括数据抓取,调度,存储,检索。

Nutch:

语言:JAVA

官网:http://nutch.apache.org/

介绍:Nutch 是一个开源Java 实现的搜索引擎。它提供了全文搜索和Web爬虫,页面调度,数据存储等功能,几乎可看作是一个完整的通用搜索引擎。合适于较大页面规模(几十亿),且只对数据做文本索引(很少结构化数据)的应用。Nutch用于做研究很不错。

Heritrix:

语言:JAVA

官网:http://www.crawler.archive.org/index.html

介绍:Heritrix是一个开源的网络爬虫系统,用户可以使用它来从网上抓取想要的资源。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑。Heritrix集成了索引调度,页面解析和数据存储。

其它的包括:DataparkSearch,Web-Harvest

网络类:

CURL

语言:C(但也支持命令行,以及其它语言绑定)

官网:http://curl.haxx.se/

介绍:CURL是一款老牌的HTTP网络库(同时支持FTP等协议)。CURL支持丰富的网络功能,包括SSL,cookie,form等等,是一款被广泛应用的网络库。CURL灵活,但稍复杂。提供数据下载,但不支持HTML解析。通常还需要配合其它库使用。

SOUP

语言:C

官网:https://wiki.gnome.org/Projects/libsoup

介绍:SOUP是又一款HTTP网络库,依赖于glib,功能强大,稳定。但国内文档较少。

浏览器类:

这类工具一般基于浏览器(比如:Firefox)扩展,由于浏览器强大的功能,所以能采集到比较全的数据,特别是JavaScript输出的数据。但应用稍受限,扩展不太方便,数据量较大时,比较难以适配。

ParseHub:

语言:Firefox扩展

官网:https://www.parsehub.com/

介绍:ParseHub是一款基于Firefox的页面分析工具,能支持比较复杂的功能,包括页面结构分析等。

GooSeeker集搜客

语言:Firefox扩展

官网:http://www.gooseeker.com/

介绍:GooSeeker是也一款基于Firefox的扩展,支持比较复杂的功能,包括指数图片,定时采集,可视化编程,等等。

采集终端类:

这类工具一般都支持Windows图形界面,基本无需写代码,可通过配置规则,实现较典型的数据采集。但数据粹取能力一般,扩展受限,较复杂应用的二次开发成本不低。

火车头

语言:授权软件

平台:Windows

官网:http://www.locoy.com/

火车头是老牌的采集软件,伴随了无数个人站长的成长,可配置性强,可实现数据转存,非常合适于个人的快速数据采集,政府机关的舆情监控。

熊猫采集

语言:授权软件

平台:Windows

官网:http://www.caijiruanjian.com/

介绍:熊猫采集功能较多,支持对新闻的通用解析,在舆情方面,有广泛应用。

库类:

通过开源库或工具库的方式提供。这些库通常只负责数据抓取的网络部分以及HTML的解析部分。而具体的业务实现,则由开发者自己实现。这种方式非常灵活,也较合适于复杂数据的抓取,以及较大规模的抓取。这些库的差异,主要体现在如下几个方面:一、语言适用。很多库只适用于某一门语言;二、功能差异。绝大部分库都只支持HTML,不支持JS,CSS等动态数据;三、接口方面。有些库提供函数级接口,有些库提供对象级接口。四、稳定性。有些库是严肃的,有些库则在逐步改进。

Simple HTML DOM Parser

语言:PHP

官网:http://simplehtmldom.sourceforge.net/

介绍:PHP的扩展模块,支持对HTML标签的解析。提供类似于JQuery的函数级接口,功能较简单,合适于对简单HTML页面的解析,做数据引擎会比较吃力。

JSoup

语言:JAVA

官网:http://jsoup.org/

介绍:JSoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

Spynner

语言:Python

官网:https://github.com/makinacorpus/spynner

介绍:Spynner是一个1000多行的Python脚本,基于Qt Webkit。相比起urllib,最大的特色是支持动态内容的抓取。Spynner依赖于xvfb与QT。由于需要进行页面渲染,速度偏慢。

Qing

语言:C++(可扩展成其它语言)

官网:http://www.qcreader.com/download.html

介绍:Qing是一个动态库,提供了一系列明确的功能函数和DOM数据结构,简单明了,但功能强大,适用性强。Qing支持JavaScript和CSS,所以对动态内容支持得很好。除了这些以外,Qing同时还支持背景图片加载,滚动加载,本地缓存,加载策略等功能。Qing速度快,功能强大且稳定,开发效率高,是企业搭建数据引擎比较好的选择。

继续阅读