悠然亂彈:WebMagic VS TinySpider

上次@黃勇 提到與@黃億華 WebMagic比較的問題。我在後面簡單回覆了一下下,現系統整理一下,不必定正確。 程序員

二者都是能夠用於網頁數據抓取,都有良好的擴展性及架構設計,可是因爲定位稍有差別,所以在開發的時候各有側重點,今天就寫一篇專門的文章進行比較,因爲對WebMagic學習得還不夠,所以有些地方多是錯誤地,歡迎指正或板磚伺候。 編程

1、掃描方法的差別

a.WebMagic的掃描 網絡

WebMagic採用的是遍地撒網、願者上勾的方式,怎麼解釋這個遍地撒網呢?
在進行內容抓取的時候,與事先定義好的處理器中的匹配規則進行匹配,匹配成功則處理之。
把全部的超連接找到並添加到待處理列表中,而後對新找到的連接繼續進行處理。

因此WebMagic會把全部的頁面都掃描一次,在掃描的過程當中進行匹配,匹配上的進行處理。
b.TinySpider的掃描
TinySpider採用的則是抽絲剝繭,精確打擊的策略。什麼個意思呢?
在進行內容抓取的時候,首先有個入口頁面,而後在上面定義了許多Watcher,實際上就是關注點了,只有它關注的點匹配的,纔會執行其後續的動做觸發,也就是掃描哪些頁面或者後續掃描的走向是由程序員徹底把控的。

因此TinySpider在掃描的時候,不必定會掃描全部的頁面,只掃描本身關心的內容。固然,TinySpider也經過遍地撒網模式進行內容抓取。

c.兩者比較 架構

WebMagic的編程模型更簡單,TinySpider的編程則要複雜一些。
WebMagic的匹配準確度稍粗一點,TinySpider的匹配精準度更強一些。
不一樣的頁面之間,WebMagic是沒有關係的,所以不一樣的頁面之間若是數據有關係,WebMagic處理起來比較麻煩,而TinySpider不一樣層次之間是能夠方便的進行數據傳遞的,這方面有必定優點。

或者簡單的說,WebMagic不一樣頁面之間是列表方式進行掃描的,而TinySpider是遞歸方式樹狀掃描的。

2、數據獲取方面的差別

WebMagic定義了數據抽取規則,若是數據比較規範,數據的抽取是很是簡單的,只要定義好屬性,再定義註解就能夠了。
TinySpider沒有提供這種類型的功能,須要開發人員本身抽取數據,帶來的好處就是自由度就更大。固然,TinySpider已經根據Watcher上定義的過濾規則把處理的數據都已經收集起來,只是本身處理便可。

3、數據存儲方面的差別

WebMagic考慮了抽取到數據以後的存儲問題,並作了良好支持。。
TinySpider則把這個所有留給程序員,反正數據已經都提取到了,你本身想怎麼處理本身決定吧。

4、比較器方面的差別

WebMagic主要經過註解加天XPath的方式進行內容抽取,所以對於比較規範的內容抓取是很是方便的。
TinySpider則內建了一個強大的匹配器,支持節點指定屬性名及指定屬性值過濾(能夠指定多組)、指定屬性名過濾(不論是什麼值均可以,能夠指定多個)、能夠指定排除屬性及屬性值(即不能包含的屬性名及值,能夠包含多組)、不能包含的屬性(能夠包含多組)、包含文本內容(能夠指定多組)、不能包含的文件內容(能夠指定多組),能夠指定包含的節點名(能夠指定多組)、能夠指定不能包含的節點(能夠指定多組)、能夠指定必須在某個節點下(能夠指定多組)、能夠指定不能在某個節點下(能夠指定多組)、能夠指定至少包含某幾個節點中的一個,能夠指定至下包含某幾個屬性中的一個,能夠根據節點名進行搜索。 不只能夠用來抓取內容,能夠能夠結合上下文準確的抓取內容。
這方面簡潔性方面WebMagic佔優,精準性方面TinySpider更強一點。

5、分佈式抓取的支持

WebMagic內建支持分佈式抓取,具體實現是在不一樣的機器上開取線程,而後共享一個抓取隊列的方式來抓取。
TinySpider裏面自己沒有分佈式抓取支持,可是開發者能夠與Tiny框架中的分佈式計算框架結合使用來完成分佈式數據的抓取。 框架

6、用途比較

WebMagic更適合對於正則、XPath比較熟悉的程序員來抓取 數據比較規範,且頁面間沒有什麼邏輯關係的Html內容

TinySpider則適合於只有Java編程基礎的程序員來處理頁面比較複雜,頁面之間有順序關係的各類規範不規範的Html頁面。 分佈式

7、容錯性比較

WebMagic中的HtmlPaser不知道用的什麼??這個方面不明確 ide

TinySpider中使用的HtmlParser是本人嘔心瀝血編寫的一個HtmlParser,有至關好的容錯性,在必定程度會能夠修復錯誤,最壞的狀況下,也會給出一個可用的Dom結構,只是結果不能保證徹底正確(原本就是錯的,不能正確修復也能夠理解)。
學習

8、擴展性比較

因爲兩個框架的問題領域是一致的,雖然設計方案不一樣,可是都有比較好的擴展性,經過擴展均可以覆蓋對方的優點領域,也就是雖然如今不支持,可是擴展擴展就能夠支持。 spa

這個方面,二平。 .net

總結

經過上面的比較,確實來講,做爲網絡內容抓取方面,WebMagic和TinySpider都是不錯的方案,在擴展性方面都設計比較到位,在編程便捷性及內容抓取準確性方面都有比較好的側重與妥協。

若是想對網頁抓取方面進行學習或實踐,兩個方案都是值得接觸的。

相關文章
相關標籤/搜索