最近在研究學習一個好部署撒遣,好管理的python爬蟲框架邮偎,pyspider貌似是一個不錯的選擇。我再這里整理了一下網(wǎng)上個各種資料愉舔,有興趣的童鞋們接下來就跟我一起學習啦钢猛。
相對于 Scrapy 框架來說, pyspider 具有以下優(yōu)點:
1.有 Web 界面用于開發(fā)爬蟲轩缤,任務命迈、項目管理,查看爬取結果
2.支持各種數(shù)據(jù)庫(MySQL火的、MongoDB壶愤、SQLite 等)存儲爬取結果;
3.可以方便設置任務優(yōu)先級馏鹤,重新爬取策略征椒;
4.支持單機與分布式部署;
5.支持 PhantomJS 爬取動態(tài)網(wǎng)頁湃累。
學習目錄:
- 安裝pyspider
- pyspider 架構學習
- pyspider通用API學習
- css selecotor選擇器勃救,pyquery學習
- pyspider擴展學習
- 。治力。蒙秒。
step 1: 安裝pyspider
首先當然是要安裝pyspider啦,請參照這里pyspider的安裝
step 2: pyspider 架構學習
如上圖所示宵统,pyspider各個組件之間通過消息隊列建立連接晕讲,運行在各自所屬的進程或者線程之中,并且是可替換的马澈。
webui
- web的可視化任務監(jiān)控
- web腳本編寫瓢省,單步調(diào)試
- 異常捕獲、log捕獲痊班,print捕獲等
Scheduler/調(diào)度器
- 任務優(yōu)先級
- 周期定時任務
- 流量控制
- 基于時間周期或前鏈標簽(如更新時間)的重抓取調(diào)度
Fetcher /抓取器
- dataurl支持勤婚,用于假抓取模擬傳遞
- method,header,cookie,proxy,etag,last_modified,timeout等等抓取調(diào)度控制
- 可以通過適配類似phantomjs的webkit引擎支持渲染
Processor/處理器
- 內(nèi)置的pyquery,以jQuery解析頁面
- 在腳本中完全控制調(diào)度抓取的各項參數(shù)
- 可以向后鏈傳遞信息
- 異常捕獲
特點:
1.各個組件間使用消息隊列連接涤伐,除了scheduler是單點的蛔六,fetcher 和 processor 都是可以多實例分布式部署的荆永。scheduler 負責整體的調(diào)度控制。
2.任務由 scheduler 發(fā)起調(diào)度国章,fetcher 抓取網(wǎng)頁內(nèi)容具钥, processor執(zhí)行預先編寫的python腳本,輸出結果或產(chǎn)生新的提鏈任務(發(fā)往 scheduler)液兽,形成閉環(huán)骂删。
3.每個腳本可以靈活使用各種python庫對頁面進行解析,使用框架API控制下一步抓取動作四啰,通過設置回調(diào)控制解析動作宁玫。
工作流:
1:每一個python腳本都會有一個on_start函數(shù),當你在WebUI中點擊Run按鈕時柑晒,一個新的任務就會被遞交給調(diào)度器欧瘪,等待執(zhí)行
2:Scheduler會分發(fā)這個task到相應的Fetcher中
3:fetcher會抓取初始化的url并生成一個request和response對象,并傳遞給Processor
4:Processor調(diào)用on_start函數(shù)并且傳遞一下新的url去爬取匙赞,但完成一個url的抓取工作時佛掖,processor會發(fā)送一個消息給Scheduler,告訴調(diào)度器這個任務完成涌庭。并且會發(fā)送一個新的task到scheduler中芥被,同時會把爬取的結果發(fā)送到一個result_queue中
5:Scheduler接收到新的task,會判斷這個任務是一個新的任務還是需要重新抓取的任務,新的任務會把他們加入到任務隊列中坐榆,如果是重新需要抓取的任務拴魄,則需要看一下時間周期,滿足要求的才會放到任務隊列中去席镀,并且按順序分發(fā)
6:上面的過程會一直持續(xù)匹中,直到程序死掉或者我們手動停止。
Pyspider控制臺使用說明
隊列統(tǒng)計:是為了方便查看爬蟲狀態(tài)豪诲,優(yōu)化爬蟲爬取速度新增的狀態(tài)統(tǒng)計.每個組件之間的數(shù)字就是對應不同隊列的排隊數(shù)量.通常來是0或是個位數(shù).如果達到了幾十甚至一百說明下游組件出現(xiàn)了瓶頸或錯誤顶捷,需要分析處理.
新建項目:pyspider與scrapy最大的區(qū)別就在這,pyspider新建項目調(diào)試項目完全在web下進行跛溉,而scrapy是在命令行下開發(fā)并運行測試.
組名:項目新建后一般來說是不能修改項目名的,如果需要特殊標記可修改組名.直接在組名上點鼠標左鍵進行修改.注意:組名改為delete后如果狀態(tài)為stop狀態(tài)扮授,24小時后項目會被系統(tǒng)刪除.
運行狀態(tài):這一欄顯示的是當前項目的運行狀態(tài).每個項目的運行狀態(tài)都是單獨設置的.直接在每個項目的運行狀態(tài)上點鼠標左鍵進行修改.運行分為五個狀態(tài):TODO芳室,STOP,CHECKING刹勃,DEBUG堪侯,RUNNING.各狀態(tài)說明:TODO是新建項目后的默認狀態(tài),不會運行項目.STOP狀態(tài)是停止狀態(tài)荔仁,也不會運行. CHECHING是修改項目代碼后自動變的狀態(tài).DEBUG是調(diào)試模式伍宦,遇到錯誤信息會停止繼續(xù)運行芽死,RUNNING是運行狀態(tài)次洼,遇到錯誤會自動嘗試关贵,如果還是錯誤會跳過錯誤的任務繼續(xù)運行.
速度控制:很多朋友安裝好用說爬的慢,多數(shù)情況是速度被限制了.這個功能就是速度設置項.rate是每秒爬取頁面數(shù)卖毁,burst是并發(fā)數(shù).如1/3是三個并發(fā)揖曾,每秒爬取一個頁面.
簡單統(tǒng)計:這個功能只是簡單的做的運行狀態(tài)統(tǒng)計,5m是五分鐘內(nèi)任務執(zhí)行情況亥啦,1h是一小時內(nèi)運行任務統(tǒng)計炭剪,1d是一天內(nèi)運行統(tǒng)計,all是所有的任務統(tǒng)計.
運行:run按鈕是項目初次運行需要點的按鈕翔脱,這個功能會運行項目的on_start方法來生成入口任務.
任務列表:顯示最新任務列表奴拦,方便查看狀態(tài),查看錯誤等
結果查看:查看項目爬取的結果.
step3: pyspider通用API學習
請移步:pyspider通用API學習
step4: css selecotor選擇器届吁,pyquery學習
請移步:css selecotor選擇器错妖,pyquery學習
step5: pyspider擴展學習
請移步:pyspider擴展學習
step6: 。瓷产。站玄。
請移步:。濒旦。株旷。