1. 程式人生 > >開源爬蟲框架哪家強?是騾子是馬,拉出來溜溜就知道了!

開源爬蟲框架哪家強?是騾子是馬,拉出來溜溜就知道了!

ide 解決 過濾器 研究 基礎上 AS python 令行 log

技術分享圖片

Project Language Star Watch Fork
Nutch Java 1111 195 808
webmagic Java 4216 618 2306
WebCollector Java 1222 255 958
heritrix3 Java 773 141 428
crawler4j Java 1831 242 1136
Pyspider Python 8581 687 2273
Scrapy Python 19642 1405 5261

看到了嗎?星星數排名第一的Scrapy比其他所有的加起來都要多,我仿佛聽到他這樣說:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

優點:

  • 極其靈活的定制化爬取。

  • 社區人數多、文檔完善。

  • URL去重采用布隆過濾器方案。

  • 可以處理不完整的HTML,Scrapy已經提供了selectors(一個在lxml的基礎上提供了更高級的接口),可以高效地處理不完整的HTML代碼。

缺點:

  • 不支持分布式部署。

  • 原生不支持抓取JavaScript的頁面。

  • 全命令行操作,對用戶不友好,需要一定學習周期。

結論

篇幅有限,就先選擇這三個最有代表性的框架進行PK。他們都有遠超別人的優點,比如:Nutch天生的搜索引擎解決方案、Pyspider產品級的WebUI、Scrapy最靈活的定制化爬取。也都各自致命的缺點,比如Scrapy不支持分布式部署,Pyspider不夠靈活,Nutch和搜索綁定。究竟該怎麽選擇呢?

我們的目標是做純粹的爬蟲,不是搜索引擎,所以先把Nutch排除掉,剩下人性化的Pyspider和高可定制的Scrapy。Scrapy的靈活性幾乎能夠讓我們完成任何苛刻的抓取需求,它的“難用”也讓我們不知不覺的研究爬蟲技術。現在還不是享受Pyspider的時候,目前的當務之急是打好基礎,應該學習最接近爬蟲本質的框架,了解它的原理,所以把Pyspider也排除掉。

最終,理性的從個人的需求角度對比,還是Scrapy勝出!其實Scrapy還有更多優點:

  • HTML, XML源數據選擇及提取的原生支持。

  • 提供了一系列在spider之間共享的可復用的過濾器(即 Item Loaders),對智能處理爬取數據提供了內置支持。

  • 通過 feed導出 提供了多格式(JSON、CSV、XML),多存儲後端(FTP、S3、本地文件系統)的內置支持。

  • 提供了media pipeline,可以 自動下載 爬取到的數據中的圖片(或者其他資源)。

  • 高擴展性。您可以通過使用 signals ,設計好的API(中間件, extensions, pipelines)來定制實現您的功能。

  • 內置的中間件及擴展為下列功能提供了支持:

  • cookies and session 處理

  • HTTP 壓縮

  • HTTP 認證

  • HTTP 緩存

  • user-agent模擬

  • robots.txt

  • 爬取深度限制

  • 針對非英語語系中不標準或者錯誤的編碼聲明, 提供了自動檢測以及健壯的編碼支持。

  • 支持根據模板生成爬蟲。在加速爬蟲創建的同時,保持在大型項目中的代碼更為一致。

  • 針對多爬蟲下性能評估、失敗檢測,提供了可擴展的 狀態收集工具 。

  • 提供 交互式shell終端 , 為您測試XPath表達式,編寫和調試爬蟲提供了極大的方便。

  • 提供 System service, 簡化在生產環境的部署及運行。

  • 內置 Telnet終端 ,通過在Scrapy進程中鉤入Python終端,使您可以查看並且調試爬蟲。

  • Logging 為您在爬取過程中捕捉錯誤提供了方便。

  • 支持 Sitemaps 爬取。

  • 具有緩存的DNS解析器。

下一步

吹了半天的Scrapy,時間也到了,如果大家能夠喜歡上它,學習的效率一定會成倍提升!下次我會為大家帶來滿滿的幹貨,並完成更具挑戰性的爬蟲任務,我們下期再見!

原文鏈接:http://www.cnblogs.com/tuohai666/p/8861422.html

歡迎關註我的博客:https://home.cnblogs.com/u/sm123456/

歡迎大家加入萬人交流群:125240963

開源爬蟲框架哪家強?是騾子是馬,拉出來溜溜就知道了!