爬蟲產(chǎn)品分析
國內(nèi)外優(yōu)秀爬蟲產(chǎn)品
國外
- kimono labs,已經(jīng)被palantir收購,目前服務已經(jīng)暫停,desktop版本可用。
- import.io
國內(nèi)
- 集搜客,目前只能以插件的形式安裝在火狐瀏覽器上
- 八爪魚
試用分析
kimono
目前kimono labs服務以及暫停,但是kimono desktop版本依舊可以用,下面是兩個版本的對比情況。
從一個爬蟲產(chǎn)品來看,desktop版本的功能已經(jīng)是全的了。

kimono產(chǎn)品從完整意義上來說并不完全是一個爬蟲產(chǎn)品,爬取頁面信息只是其中一個環(huán)節(jié),它的目的是將整個
互聯(lián)網(wǎng)作為一個完整的數(shù)據(jù)庫來使用,簡化應用的開發(fā)流程。它的著眼點是應用,而不是數(shù)據(jù)。后面會做介紹。
先看看kimono desktop版本如何使用:

其中第三步(安裝firebase)是可選的,這里可以科普一下firebase的基本知識,具體使用因為爬取數(shù)據(jù)
關系不大,此處不做詳細介紹
Firebase攻克了實時性這一難關,自動響應數(shù)據(jù)變化,為用戶帶來全新的交互體驗。用戶可以使用JavaScript 直接從客戶端訪問Firebase中存儲的數(shù)據(jù),無需運行自有數(shù)據(jù)庫或網(wǎng)絡服務器即可構建動態(tài)的、數(shù)據(jù)驅(qū)動的網(wǎng)站,且與用戶現(xiàn)有后臺工具并行不悖。用戶無需購置服務器,也不需要編寫服務器代碼,只需應用HTML 和JavaScript技術就可創(chuàng)建交互性極強的應用。Firebase簡化了編碼工作,使用戶可以專注問題本身,節(jié)省開發(fā)時間,迅速完成應用。
從上面也可以看出:kimono主要的用途還是快速開發(fā)應用。盡量簡化用戶獲取數(shù)據(jù)的過程。
以zhihu為例,探索一下kimono的數(shù)據(jù)收集和服務提供過程:
安裝插件

中間的k字圖標就是安裝好的chrome瀏覽器插件,目前看Kimono只支持chrome瀏覽器,desktop版本支持mac版本和windows版本。
安裝chrome插件需要用到vpn
屬性字段定義

kimono抓取數(shù)據(jù)的過程比較直觀,如圖所示,左上角有屬性框,可以定義要抓取的屬性的名字,屬性的內(nèi)容可以直接用鼠標在頁面上點選,其中黃色的部分就是點選的結果。
可以定義多個屬性,在上面的插件欄中每個屬性都用一個圓形圖標表示,圓形圖標中的數(shù)字表明在頁面內(nèi)容中獲取到了幾個數(shù)據(jù)。
*** 注意:***
- 如果鼠標點選的時候,選中了多個內(nèi)容,可以通過x按鈕去掉不想要的內(nèi)容
- 選擇的力度有時候并沒有那么細,比如只想要某個數(shù)量,但是會把放在一起的漢字選上
通過插件中的預覽按鈕,可以看到當前頁面的屬性選取情況。這里從當前的問題頁中選了四個字段,可以看到字段的名稱和內(nèi)容。

這里選取頁面屬性是通過頁面中的dom樹來實現(xiàn)的,在高級模式下,可以看到每個屬性對應的dom樹路徑,并可以按需來進行修改路徑。
這也是為什么某一些內(nèi)容會多選的原因,最細的粒度只能到dom樹的一個葉子節(jié)點。

因為kimono是一個快速構建api的系統(tǒng),所以也提供了api常用的幾種數(shù)據(jù)傳輸格式,主要是json,csv和rss,這里看一下就可以,不用太關注。


當把頁面中所有的屬性都選取完畢之后,就可以點擊插件上的done按鈕,完成屬性字段的定義了。這時候會彈出一個api的定義框,可以定義api的名稱。

api創(chuàng)建完畢后,可以看到kimono desktop上也有了剛剛創(chuàng)建的api。kimono desktop在啟動之后會在本地啟動一個服務器,插件會在創(chuàng)建api的時候?qū)?br> 內(nèi)容同步到kimono desktop app中。

數(shù)據(jù)抓取
上面只是從頁面中定義了要抓取的屬性,相當于定義了一個頁面的抓取規(guī)則,并沒有開始實際頁面抓取的過程。從kimono desktop中點開創(chuàng)建的api可以看到下面三部分內(nèi)容:
Data View/Crawl Setup/Modify Result。對應了完整的數(shù)據(jù)爬取過程。
- Data View
Data View中是用不同的格式來顯示最終的獲取結果,目前這個api還沒有啟動,只有在定義字段的時候獲取到的一條結果。

- Crawl Setup
Crawl Setup部分的內(nèi)容比較重要,爬蟲系統(tǒng)中最基礎的有兩部分,一部分是屬性字段的定義,一部分是url的生成,
Crawl Setup定義了四種url的生成規(guī)則:Source URL Only/Manual URL List/Generated URL List/Source URL API. 前兩種很好理解,第三種是根據(jù)特別的規(guī)則生成URL。規(guī)則有三種:缺省值,普通列表和隨機值。隨機值的時候可以是一個范圍。

通過隨機值生成的URL列表如下,從41181466-41191466,共有9981個pages:

- Modify Result
前面說過獲取的結果的最小的粒度只是dom樹的葉子節(jié)點。這樣有一些數(shù)據(jù)就比較粗糙。這里提供了修改獲取的結果的機會,可以對獲取到的原始數(shù)據(jù)做二次處理。


kimono只支持通過JavaScript修改結果數(shù)據(jù)
根據(jù)上面的配置,最終的爬取結果如下:

這里因為沒有注冊kimono的賬戶,也沒有配置自己的firebase服務,所以沒有繼續(xù)測試通過網(wǎng)絡調(diào)用創(chuàng)建的api獲取數(shù)據(jù)。因為本次主要分析爬蟲產(chǎn)品,不關注如何作為一個快速app的服務,所以api的可用性部分不再驗證。
總結
梳理了一下kimono的整體架構:

從上圖可以看出kimono的一些設計思路:
爬取規(guī)則(屬性字段)和爬蟲是分離的,整體來說可以分為三部分:規(guī)則定義、調(diào)度規(guī)則、爬蟲系統(tǒng)部分。
因為爬取規(guī)則部分是和網(wǎng)頁緊密相關的,所以這部分直接以瀏覽器插件的形式嵌入到瀏覽器中,方便用戶直觀地定義個性化的爬取規(guī)則。
調(diào)度規(guī)則主要是url的定義,這部分也需要用戶自定義,不同網(wǎng)站的規(guī)則往往不同,這里通過一個桌面軟件能方便使用,當然也可以直接放在網(wǎng)站上,現(xiàn)在不能使用的kimono labs應該就是這樣,可以節(jié)省用戶下載app的開銷,但是不好的地方是要保持聯(lián)網(wǎng),這樣才能保證瀏覽器插件和網(wǎng)站的通信。目前kimono提供了桌面端程序和網(wǎng)絡端程序,還是很全面的。
提供了修改結果的接口,允許用戶對直接抓取的結果進行修改,這樣直接可以輸出最終數(shù)據(jù)了。當然kimono本質(zhì)上輸出的是接口,不是數(shù)據(jù)。
爬蟲系統(tǒng)我們是看不到的,完全隱藏在kimono服務器后面。
優(yōu)點
簡潔直觀,也相對靈活。對前端知識了解較少也可以使用。同時也提供了高級模式供高端用戶進行個性化的配置。
完全屏蔽爬蟲細節(jié),用戶只需要按照自己的需求考慮業(yè)務邏輯即可,不用關心技術細節(jié)。
ui界面做得比較美觀易用。
缺點
目前只支持不需要登陸的頁面,沒有提供配置cookie或者其他的繞過登陸的機制。
某些情況下用頁面點選的方式會導致一些元素獲取不到,不過有高級模式可以彌補。
url的生成規(guī)則比較簡單,一些設計復雜的頁面會比較難以生成有效的url。
界面過于簡潔,用戶可以控制的部分比較少,碰到一些反爬蟲機制的時候用戶可能不好調(diào)整。易用性和靈活性兩難全。
import.io
import.io的magic很神奇,直接在輸入一個網(wǎng)址,直接就能自動分析出來要爬的字段。雖然有冗余,也已經(jīng)很神奇了。


import.io也有app,沒有瀏覽器插件,app有windows/mac/linux平臺的。通過app可以使用全部的功能,這點和kimono不同,kimono的桌面端程序的功能比網(wǎng)絡端的少。
完整版的import.io包含下面四個組件:

Magic
magic功能和網(wǎng)頁版的一樣,能智能解析網(wǎng)頁上的內(nèi)容,但是沒有辦法編輯獲取的數(shù)據(jù)字段的內(nèi)容。具體技術不太清楚,猜測是用了類似于自然語言解析之類的技術,這個是importio的比較酷的功能,但是目前看實用性并不大。
Extractor
import的extractor和kimono的功能比較類似,可以實現(xiàn)爬取規(guī)則的定義和修改,定義爬取路線(URL的生成規(guī)則),并提供結果的導出,或者作為一個API存在。Extractor通過xpath來定義爬取規(guī)則的,沒有用jquery.同時也不提供對結果數(shù)據(jù)的修改。




Crawler
Crawler在Extractor的基礎上,實現(xiàn)了自動翻頁功能。假設要采集頁面數(shù)為100的網(wǎng)頁數(shù)據(jù),通過 http://import.io 的Crawler功能就能一鍵將這100頁的信息采集下來,那么具體的采集過程是如何實現(xiàn)的,下面筆者帶你簡單了解一下Crawler的采集過程。
Connector
就是在網(wǎng)頁上做動作,主要是針對網(wǎng)址無變化,但信息在深層次頁面上。需要做了動作以后才能顯示出來,但是頁面的網(wǎng)址又不發(fā)生變化,這就大大增加了采集數(shù)據(jù)的難度,因為即使配置好了規(guī)則,結果爬蟲進入的頁面是初始頁面,無法采集到目標信息,而Connector的存在就是為了解決此類問題。Connector可以記錄這一點擊過程,進而采集到目標頁面的信息。
對import.io和集搜客的詳細分析,集搜客的CTO已經(jīng)做了很詳細的分析,可以參考下面的引用:
import.io和集搜客
從分析文章中可以看出gooseeker只能針對一些網(wǎng)站預先定義好爬取規(guī)則,然后公布給別人用。
這個過程只是將爬取過程進行了自動化,簡化了爬蟲的環(huán)境配置工作,在通用性上并沒有太多亮點,
相比來說,import.io做得更好,在通用性上已經(jīng)比較智能了,這個應該是一個優(yōu)秀爬蟲產(chǎn)品的方向。
http://www.zhihu.com/question/41392315/answer/90929603?from=profile_answer_card
總結
importio的主要功能也是集中在定義爬取規(guī)則和定義爬取路線上。功能做得更復雜,相比kimono來說,上手的難度更大一些,但是功能更強大一些,相比來說也更加靈活。
集搜客沒有用過,需要使用指定版本的firefox瀏覽器才能使用(不是最新版本的),用戶體驗并不好。
importio和集搜客因為已經(jīng)有人做過分析,所以這里分析的就比較簡略,如果感興趣的可以看上面知乎上華天清的分析。
八爪魚
八爪魚是國內(nèi)一款很好的爬蟲工具,只有windows版本,并且需要安裝在pc上注冊之后使用,收費版會開放一些更高級的功能。

從八爪魚的宣傳來看,目前已有很大的用戶群了。

八爪魚和kimono和importio相比,是一個純粹的爬蟲產(chǎn)品。專注于替企業(yè)和個人爬取數(shù)據(jù),而且目前已經(jīng)做得相當好了,八爪重對于爬蟲生態(tài)也有涉及,有社區(qū)可以交易爬取規(guī)則,如我們先前爬取的58的頁面在社區(qū)中就有現(xiàn)成的規(guī)則。這也是一種好的方式,可以避免簡單重復的工作。也有一部分人在社區(qū)上交易數(shù)據(jù)
八爪魚的界面雖然不夠美觀簡介,但是功能比較聚焦,一個單頁面的完整爬取過程如下:




爬取規(guī)則的定義沒有亮點,都是通過鼠標點擊獲取要爬取的內(nèi)容,然后生成爬取規(guī)則。這里做得不好的是,爬取規(guī)則不能修改。但是提供了一些常用的字段,比如url和爬取時間等等。有小改進。
八爪魚在生成爬取路線的時候,不易用,沒有像kimono和importio那樣簡單易用的url生成規(guī)則。
總結
相比其他爬蟲產(chǎn)品,八爪魚在做爬蟲產(chǎn)品的同時也涉及了一部分爬蟲生態(tài)的內(nèi)容??梢蕴崛『徒灰着老x規(guī)則是一個亮點。其他的比較實用的功能并沒有。
思考
根據(jù)上面不同爬蟲產(chǎn)品的試用,從用戶角度來看好用的爬蟲產(chǎn)品應該有下面幾個特點:
規(guī)則提取簡單,能通過可視化的簡潔的方式來提取規(guī)則,這方面kimono做得最好。
要提供修改規(guī)則的高級模式,允許用戶對規(guī)則進行修改,滿足少部分用戶的需求。
爬取路線要清晰,可以提供多種配置url的方式,而且要清晰簡明,kimono和importio都比較清晰,kimono有4種方式配置url,importio有3種,八爪魚簡單試用了一下只看到2種且不清晰。
可以對爬取之后的數(shù)據(jù)進行修改,這樣可以將一些費時的操作在數(shù)據(jù)處理的過程中就完成了,不用到應用部分再處理。
對用戶屏蔽盡量多的細節(jié),對于分布式爬取,數(shù)據(jù)存儲過程,不同組件之間的通信等都要盡量屏蔽掉,讓用戶能集中于數(shù)據(jù)獲取過程。
能自動識別頁面中有用的信息,給出一些模糊的數(shù)據(jù)并支持后續(xù)修改。importio的magic支持智能獲取信息字段,但是不支持對識別出來的數(shù)據(jù)進行處理。網(wǎng)上看到有個教程上面有修改數(shù)據(jù)字段的操作,但是實際試用過程中并沒有看到該功能。
另外一些沒有被其他爬蟲實現(xiàn),但是可能是重要的功能
用戶登錄,對登錄過程的支持,復雜的情況下要可以識別驗證碼。
支持選取不同的數(shù)據(jù)庫存儲數(shù)據(jù),目前的幾款產(chǎn)品都將數(shù)據(jù)存儲在他們自己的服務器上,對外提供導出等接口,數(shù)據(jù)量很龐大的時候并不合適。
如果必要能開放更靈活和復雜的功能給用戶,如能調(diào)整爬取速率,配置代理等來規(guī)避一些反爬蟲機制
支持增量爬取,目前看上述幾種爬蟲產(chǎn)品都不支持增量爬取。