天天看點

有哪些好用的網際網路資料抓取,資料采集,頁面解析工具?

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速度快,功能強大且穩定,開發效率高,是企業搭建資料引擎比較好的選擇。

繼續閱讀