爬蟲入門以後,咱們有兩條路能夠走。python
一個是繼續深刻學習,以及關於設計模式的一些知識,強化Python相關知識,本身動手造輪子,繼續爲本身的爬蟲增長分佈式,多線程等功能擴展。另外一條路即是學習一些優秀的框架,先把這些框架用熟,能夠確保可以應付一些基本的爬蟲任務,也就是所謂的解決溫飽問題,而後再深刻學習它的源碼等知識,進一步強化。git
就我的而言,前一種方法其實就是本身動手造輪子,前人其實已經有了一些比較好的框架,能夠直接拿來用,可是爲了本身可以研究得更加深刻和對爬蟲有更全面的瞭解,本身動手去多作。後一種方法就是直接拿來前人已經寫好的比較優秀的框架,拿來用好,首先確保能夠完成你想要完成的任務,而後本身再深刻研究學習。第一種而言,本身探索的多,對爬蟲的知識掌握會比較透徹。第二種,拿別人的來用,本身方便了,但是可能就會沒有了深刻研究框架的心情,還有可能思路被束縛。github
不過我的而言,我本身偏向後者。造輪子是不錯,可是就算你造輪子,你這不也是在基礎類庫上造輪子麼?能拿來用的就拿來用,學了框架的做用是確保本身能夠知足一些爬蟲需求,這是最基本的溫飽問題。假若你一直在造輪子,到最後都沒造出什麼來,別人找你寫個爬蟲研究了這麼長時間了都寫不出來,豈不是有點得不償失?因此,進階爬蟲我仍是建議學習一下框架,做爲本身的幾把武器。至少,咱們能夠作到了,就像你拿了把槍上戰場了,至少,你是能夠打擊敵人的,比你一直在磨刀好的多吧?web
博主接觸了幾個爬蟲框架,其中比較好用的是 Scrapy 和PySpider。就我的而言,pyspider上手更簡單,操做更加簡便,由於它增長了 WEB 界面,寫爬蟲迅速,集成了phantomjs,能夠用來抓取js渲染的頁面。Scrapy自定義程度高,比 PySpider更底層一些,適合學習研究,須要學習的相關知識多,不過本身拿來研究分佈式和多線程等等是很是合適的。設計模式
在這裏博主會一一把本身的學習經驗寫出來與你們分享,但願你們能夠喜歡,也但願能夠給你們一些幫助。網絡
PySpider是binux作的一個爬蟲架構的開源化實現。主要的功能需求是:多線程
而這也是絕大多數python爬蟲的需求 —— 定向抓取,結構化化解析。可是面對結構迥異的各類網站,單一的抓取模式並不必定能知足,靈活的抓取控制是必須的。爲了達到這個目的,單純的配置文件每每不夠靈活,因而,經過腳本去控制抓取是最後的選擇。
而去重調度,隊列,抓取,異常處理,監控等功能做爲框架,提供給抓取腳本,並保證靈活性。最後加上web的編輯調試環境,以及web任務監控,即成爲了這套框架。架構
pyspider的設計基礎是:以python腳本驅動的抓取環模型爬蟲python爬蟲
pyspider的架構主要分爲 scheduler(調度器), fetcher(抓取器), processor(腳本執行):框架
Scrapy是一個爲了爬取網站數據,提取結構性數據而編寫的應用框架。 能夠應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。
其最初是爲了頁面抓取 (更確切來講, 網絡抓取 )所設計的, 也能夠應用在獲取API所返回的數據(例如 Amazon Associates Web Services ) 或者通用的網絡爬蟲。Scrapy用途普遍,能夠用於數據挖掘、監測和自動化測試
Scrapy 使用了 Twisted 異步網絡庫來處理網絡通信。總體架構大體以下
Scrapy主要包括瞭如下組件:
Scrapy運行流程大概以下:
對這兩個框架進行基本的介紹以後,接下來我會介紹這兩個框架的安裝以及框架的使用方法,但願對你們有幫助。