您好,登錄后才能下訂單哦!
大家好!我們從今天開始學習開源爬蟲框架Scrapy,如果你看過《手把手》系列的前兩篇,那么今天的內容就非常容易理解了。細心的讀者也許會有疑問,為什么不學出身名門的Apache頂級項目Nutch,或者人氣飆升的國內大神開發的Pyspider等框架呢?原因很簡單,我們來看一下主流爬蟲框架在GitHub上的活躍度:
看到了嗎?星星數排名第一的Scrapy比其他所有的加起來都要多,我仿佛聽到他這樣說:
好了,以上純屬玩笑,切莫認真,不然要引發口水戰了!這些框架都很優秀,都有很多用戶,活躍度相對低的并不說明技術低,活躍度相對高的也許只是多滿足了一些用戶需求。接下來我們還是要理性的對主流爬蟲框架做一個對比分析。
各路英雄已經到齊了, PK現在開始!
介紹:
Nutch是一個開源的Java實現的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和網絡爬蟲。
盡管搜索是上網的基本要求,但是現有的搜索引擎的數目卻在下降。并且這很有可能進一步演變成為一個公司壟斷了幾乎所有的網頁搜索為其謀取商業利益。這顯然不利于廣大Internet用戶。
Nutch為我們提供了這樣一個不同的選擇。相對于那些商用的搜索引擎,Nutch作為開放源代碼的搜索引擎將會更加透明,從而更值得大家信賴。現在所有主要的搜索引擎都采用私有的排序算法, 而不會解釋為什么一個網頁會排在一個特定的位置。除此之外, 有的搜索引擎依照網站所付的費用, 而不是根據它們本身的價值進行排序。與它們不同,Nutch沒有什么需要隱瞞,也沒有動機去扭曲搜索的結果。Nutch將盡自己最大的努力為用戶提供最好的搜索結果。
優點:
Nutch支持分布式抓取,并有Hadoop支持,可以進行多機分布抓取,存儲和索引。另外很吸引人的一點在于,它提供了一種插件框架,使得其對各種網頁內容的解析、各種數據的采集、查詢、集群、過濾等功能能夠方便的進行擴展。正是由于有此框架,使得 Nutch 的插件開發非常容易,第三方的插件也層出不窮,極大的增強了 Nutch 的功能和聲譽。
缺點:
對于大多數用戶來說,一般是想做一個精確數據爬取的爬蟲,就像第一篇里爬歌單那個“主題爬蟲”。而第二篇介紹的“通用爬蟲”適合做搜索引擎,這種需求就比較少。如果以此為標準,那么為搜索引擎而生的Nutch就有著天生缺點。Nutch的架構里大部分為搜索引擎而設計的,對精確爬取沒有特別的考慮。也就是說,用Nutch做主題爬蟲,會浪費很多的時間在不必要的計算上。而且如果你試圖通過對Nutch進行二次開發來擴展其定制能力,基本上就要破壞Nutch的框架,反而不如自己寫了。
介紹:
Pyspider是一個國人編寫的強大的網絡爬蟲系統并帶有強大的WebUI。采用Python語言編寫,分布式架構,支持多種數據庫后端,強大的WebUI支持腳本編輯器,任務監視器,項目管理器以及結果查看器。
Pyspider的主要功能包括,抓取、更新調度多站點的特定的頁面;需要對頁面進行結構化信息提取;靈活可擴展,穩定可監控。滿足了絕大多數Python爬蟲的需求 —— 定向抓取,結構化化解析。但是面對結構迥異的各種網站,單一的抓取模式并不一定能滿足,靈活的抓取控制是必須的。為了達到這個目的,單純的配置文件往往不夠靈活,于是,通過腳本去控制抓取成為了最后的選擇。而去重調度,隊列,抓取,異常處理,監控等功能作為框架,提供給抓取腳本,并保證靈活性。最后加上web的編輯調試環境,以及web任務監控,即成為了最終的框架。
優點:
支持分布式部署。
完全可視化,對用戶非常友好:WEB 界面編寫調試腳本,起停腳本,監控執行狀態,查看活動歷史,獲取結果產出。
簡單,五分鐘就能上手。腳本規則簡單,開發效率高。
支持抓取JavaScript的頁面。
總之,Pyspider非常強大,強大到更像一個產品而不是一個框架。
缺點:
URL去重使用數據庫而不是布隆過濾器,億級存儲的db io將導致效率急劇降低。
使用上的人性化犧牲了靈活度,定制化能力降低。
介紹:
Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。Scrapy 使用 Twisted這個異步網絡庫來處理網絡通訊,架構清晰,并且包含了各種中間件接口,可以靈活的完成各種需求。Scratch,是抓取的意思,這個Python的爬蟲框架叫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,時間也到了,如果大家能夠喜歡上它,學習的效率一定會成倍提升!下次我會為大家帶來滿滿的干貨,并完成更具挑戰性的爬蟲任務,我們下期再見!
最后,初學者進階的福音
想學習,基礎不夠?沒關系,我們提供免費提供VIP基礎學習課程,讓你快速入門,掌握Python!
有基礎的小伙伴想學習項目實戰?沒問題,每晚八點都有博士大牛帶你學習操作項目!
只要你有一顆想學習的心,我們隨時歡迎~
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。