上次@黃勇 提到與@黃億華 WebMagic比較的問題。我在後面簡單回覆了一下下,現系統整理一下,不必定正確。 程序員
二者都是能夠用於網頁數據抓取,都有良好的擴展性及架構設計,可是因爲定位稍有差別,所以在開發的時候各有側重點,今天就寫一篇專門的文章進行比較,因爲對WebMagic學習得還不夠,所以有些地方多是錯誤地,歡迎指正或板磚伺候。 編程
a.WebMagic的掃描 網絡
WebMagic採用的是遍地撒網、願者上勾的方式,怎麼解釋這個遍地撒網呢? 在進行內容抓取的時候,與事先定義好的處理器中的匹配規則進行匹配,匹配成功則處理之。 把全部的超連接找到並添加到待處理列表中,而後對新找到的連接繼續進行處理。 因此WebMagic會把全部的頁面都掃描一次,在掃描的過程當中進行匹配,匹配上的進行處理。b.TinySpider的掃描
TinySpider採用的則是抽絲剝繭,精確打擊的策略。什麼個意思呢? 在進行內容抓取的時候,首先有個入口頁面,而後在上面定義了許多Watcher,實際上就是關注點了,只有它關注的點匹配的,纔會執行其後續的動做觸發,也就是掃描哪些頁面或者後續掃描的走向是由程序員徹底把控的。 因此TinySpider在掃描的時候,不必定會掃描全部的頁面,只掃描本身關心的內容。固然,TinySpider也經過遍地撒網模式進行內容抓取。
c.兩者比較 架構
WebMagic的編程模型更簡單,TinySpider的編程則要複雜一些。 WebMagic的匹配準確度稍粗一點,TinySpider的匹配精準度更強一些。 不一樣的頁面之間,WebMagic是沒有關係的,所以不一樣的頁面之間若是數據有關係,WebMagic處理起來比較麻煩,而TinySpider不一樣層次之間是能夠方便的進行數據傳遞的,這方面有必定優點。 或者簡單的說,WebMagic不一樣頁面之間是列表方式進行掃描的,而TinySpider是遞歸方式樹狀掃描的。
WebMagic內建支持分佈式抓取,具體實現是在不一樣的機器上開取線程,而後共享一個抓取隊列的方式來抓取。
TinySpider裏面自己沒有分佈式抓取支持,可是開發者能夠與Tiny框架中的分佈式計算框架結合使用來完成分佈式數據的抓取。 框架
TinySpider則適合於只有Java編程基礎的程序員來處理頁面比較複雜,頁面之間有順序關係的各類規範不規範的Html頁面。 分佈式
WebMagic中的HtmlPaser不知道用的什麼??這個方面不明確 ide
TinySpider中使用的HtmlParser是本人嘔心瀝血編寫的一個HtmlParser,有至關好的容錯性,在必定程度會能夠修復錯誤,最壞的狀況下,也會給出一個可用的Dom結構,只是結果不能保證徹底正確(原本就是錯的,不能正確修復也能夠理解)。
學習
因爲兩個框架的問題領域是一致的,雖然設計方案不一樣,可是都有比較好的擴展性,經過擴展均可以覆蓋對方的優點領域,也就是雖然如今不支持,可是擴展擴展就能夠支持。 spa
這個方面,二平。 .net
經過上面的比較,確實來講,做爲網絡內容抓取方面,WebMagic和TinySpider都是不錯的方案,在擴展性方面都設計比較到位,在編程便捷性及內容抓取準確性方面都有比較好的側重與妥協。
若是想對網頁抓取方面進行學習或實踐,兩個方案都是值得接觸的。