1. 程式人生 > >有哪些好用的網際網路資料抓取,資料採集,頁面解析工具?

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

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解析。通常還需要配合其它庫使用。

瀏覽器類
這類工具一般基於瀏覽器(比如: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速度快,功能強大且穩定,開發效率高,是企業搭建資料引擎比較好的選擇。