摘要:從零開始寫爬蟲,初學者的速成指南!web
封面:算法
你們好!咱們從今天開始學習開源爬蟲框架Scrapy,若是你看過《Python網絡爬蟲》系列的前兩篇,那麼今天的內容就很是容易理解了。細心的讀者也許會有疑問,爲何不學出身名門的Apache頂級項目Nutch,或者人氣飆升的國內大神開發的Pyspider等框架呢?緣由很簡單,咱們來看一下主流爬蟲框架在GitHub上的活躍度:shell
看到了嗎?星星數排名第一的Scrapy比其餘全部的加起來都要多,我彷彿聽到他這樣說:數據庫
好了,以上純屬玩笑,切莫認真,否則要引起口水戰了!這些框架都很優秀,都有不少用戶,活躍度相對低的並不說明技術低,活躍度相對高的也許只是多知足了一些用戶需求。接下來咱們仍是要理性的對主流爬蟲框架作一個對比分析。後端
各路英雄已經到齊了, PK如今開始!緩存
介紹:cookie
Nutch是一個開源的Java實現的搜索引擎。它提供了咱們運行本身的搜索引擎所需的所有工具,包括全文搜索和網絡爬蟲。網絡
儘管搜索是上網的基本要求,可是現有的搜索引擎的數目卻在降低。而且這頗有可能進一步演變成爲一個公司壟斷了幾乎全部的網頁搜索爲其謀取商業利益。這顯然不利於廣大Internet用戶。session
Nutch爲咱們提供了這樣一個不一樣的選擇。相對於那些商用的搜索引擎,Nutch做爲開放源代碼的搜索引擎將會更加透明,從而更值得你們信賴。如今全部主要的搜索引擎都採用私有的排序算法, 而不會解釋爲何一個網頁會排在一個特定的位置。除此以外, 有的搜索引擎依照網站所付的費用, 而不是根據它們自己的價值進行排序。與它們不一樣,Nutch沒有什麼須要隱瞞,也沒有動機去扭曲搜索的結果。Nutch將盡本身最大的努力爲用戶提供最好的搜索結果。架構
優勢:
Nutch支持分佈式抓取,並有Hadoop支持,能夠進行多機分佈抓取,存儲和索引。另外很吸引人的一點在於,它提供了一種插件框架,使得其對各類網頁內容的解析、各類數據的採集、查詢、集羣、過濾等功能可以方便的進行擴展。正是因爲有此框架,使得 Nutch 的插件開發很是容易,第三方的插件也層出不窮,極大的加強了 Nutch 的功能和聲譽。
缺點:
對於大多數用戶來講,通常是想作一個精確數據爬取的爬蟲,就像第一篇裏爬歌單那個「主題爬蟲」。而第二篇介紹的「通用爬蟲」適合作搜索引擎,這種需求就比較少。若是以此爲標準,那麼爲搜索引擎而生的Nutch就有着天生缺點。Nutch的架構裏大部分爲搜索引擎而設計的,對精確爬取沒有特別的考慮。也就是說,用Nutch作主題爬蟲,會浪費不少的時間在沒必要要的計算上。並且若是你試圖經過對Nutch進行二次開發來擴展其定製能力,基本上就要破壞Nutch的框架,反而不如本身寫了。
介紹:
Pyspider是一個國人編寫的強大的網絡爬蟲系統並帶有強大的WebUI。採用Python語言編寫,分佈式架構,支持多種數據庫後端,強大的WebUI支持腳本編輯器,任務監視器,項目管理器以及結果查看器。
Pyspider的主要功能包括,抓取、更新調度多站點的特定的頁面;須要對頁面進行結構化信息提取;靈活可擴展,穩定可監控。知足了絕大多數Python爬蟲的需求 —— 定向抓取,結構化化解析。可是面對結構迥異的各類網站,單一的抓取模式並不必定能知足,靈活的抓取控制是必須的。爲了達到這個目的,單純的配置文件每每不夠靈活,因而,經過腳本去控制抓取成爲了最後的選擇。而去重調度,隊列,抓取,異常處理,監控等功能做爲框架,提供給抓取腳本,並保證靈活性。最後加上web的編輯調試環境,以及web任務監控,即成爲了最終的框架。
優勢:
總之,Pyspider很是強大,強大到更像一個產品而不是一個框架。
缺點:
介紹:
Scrapy是一個爲了爬取網站數據,提取結構性數據而編寫的應用框架。 能夠應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。Scrapy 使用 Twisted這個異步網絡庫來處理網絡通信,架構清晰,而且包含了各類中間件接口,能夠靈活的完成各類需求。Scratch,是抓取的意思,這個Python的爬蟲框架叫Scrapy,大概也是這個意思吧。
優勢:
缺點:
篇幅有限,就先選擇這三個最有表明性的框架進行PK。他們都有遠超別人的優勢,好比:Nutch天生的搜索引擎解決方案、Pyspider產品級的WebUI、Scrapy最靈活的定製化爬取。也都各自致命的缺點,好比Scrapy不支持分佈式部署,Pyspider不夠靈活,Nutch和搜索綁定。究竟該怎麼選擇呢?
咱們的目標是作純粹的爬蟲,不是搜索引擎,因此先把Nutch排除掉,剩下人性化的Pyspider和高可定製的Scrapy。Scrapy的靈活性幾乎可以讓咱們完成任何苛刻的抓取需求,它的「難用」也讓咱們不知不覺的研究爬蟲技術。如今還不是享受Pyspider的時候,目前的當務之急是打好基礎,應該學習最接近爬蟲本質的框架,瞭解它的原理,因此把Pyspider也排除掉。
最終,理性的從我的的需求角度對比,仍是Scrapy勝出!其實Scrapy還有更多優勢:
吹了半天的Scrapy,時間也到了,若是你們可以喜歡上它,學習的效率必定會成倍提高!下次我會爲你們帶來滿滿的乾貨,並完成更具挑戰性的爬蟲任務,咱們下期再見!
須要項目案例系列講解資料,點擊喜歡而後進做者建立羣:814468827 找羣文件:Python資料2