前言
pyspider是支持WebUI的,支持任務(wù)監(jiān)控漂洋,項目管理遥皂,以及多種數(shù)據(jù)庫的一個強大的爬蟲框架,這個真的很好用9羝Q菅怠!這主要不是教大家怎么使用贝咙,怎么怎么樣样悟,主要是讓大家懂運行的原理,以及框架的整體結(jié)構(gòu)庭猩!
今天主要是分為這幾部分:
1.為什么要使用pyspider乌奇?
2.pyspider的安裝
3.pyspider簡單使用
4.pyspider框架的架構(gòu)和執(zhí)行流程
一、為什么要使用pyspider眯娱?
我們很好奇礁苗,我們明明有了Scrapy框架,為什么還要使用pyspider框架呢徙缴?我們說兩點
- pyspider的優(yōu)點试伙,它有這么幾個優(yōu)點
1.提供WebUI界面,調(diào)試爬蟲很方便
2.可以很方便的進行爬取的流程監(jiān)控和爬蟲項目管理
3.支持常見的數(shù)據(jù)庫
4.支持使用PhantomJS于样,可以抓取JavaScript頁面
5.支持優(yōu)先級定制和定時爬取等功能 - 和Scrapy的比較
1.pyspider 提供 WebUI,Scrapy它采用的是代碼和命令行操作疏叨,但可以通過對接 Portia 現(xiàn)可視化配置
2.pyspider 支持 PhantomJS來進行 JavaScript 誼染頁面的采集 Scrapy 可以對接 Sc rapy-Splash組件,這需要額外配置
3.pyspider 中內(nèi)置pyquery 作為選擇器而Scrapy 接了XPath 對接css選擇器和正則匹配
4.pyspider的可擴展程度不高穿剖,Scrapy可以通過對接其他的模塊實現(xiàn)強大的功能蚤蔓,模塊之間的耦合度低 - 總結(jié)
所以如果要快速實現(xiàn)一個頁面的抓取,推薦使用 pyspider,開發(fā)更加便捷,如果要應(yīng)對反爬程度很強糊余、超大規(guī)模的抓取秀又,推薦使用 Scrapy 单寂,
二、pyspider的安裝
pyspider的安裝相對簡單吐辙,不需要安裝一些列的依賴庫直接使用
pip install pyspider
然后等待安裝成功就行宣决,也可以使用源碼安裝 pyspider源碼
三、pyspider的簡單使用
1.安裝之后先驗證是否安裝成功昏苏,在CMD下輸入
pyspider
或者
pyspider all
兩者是一樣的尊沸,新的pyspider框架已經(jīng)整合了,所以使用pyspider就好
出現(xiàn)這個則說明運行成功贤惯,運行在5000端口洼专,當然這個可以改
2.打開瀏覽器,輸入
進入pyspider控制臺
出現(xiàn)這個則說明你的框架沒什么問題7豕埂:!
我把框架的執(zhí)行分為了這么幾部分
- 創(chuàng)建
- 執(zhí)行
- 調(diào)試
-
結(jié)果
我們分別來一步步說一下
1.創(chuàng)建
點擊create開始創(chuàng)建
彈出兩個東西浦译,project name 是你項目的名稱 start url 是你要爬取的鏈接棒假,分別輸入以后,再次點擊右下角的create精盅,完成創(chuàng)建
整個右邊部分帽哑,分為這么幾個東西
1.右上角的save 是保存按鈕,更改代碼之后幾點保存
2.左上角的#后面的是你創(chuàng)建的一些參數(shù)叹俏,如創(chuàng)建時間妻枕,爬取域名,編碼格式等
3.下面的代碼部分是創(chuàng)建項目自動生成的粘驰,你可以添加一些你自己的東西屡谐,我們在這里完成整個項目的爬取、解析蝌数、以及保存等工作
crawl_config:項目的所有爬取配置統(tǒng)一定義到這里愕掏,如定義 Headers 、設(shè)置代理等顶伞,配置之后全局生效
@every:設(shè)置定時爬取的時間
on_start:爬取入口饵撑,初始的爬取請求會在這里產(chǎn)生
self.crawl:該方法是爬取的主方法,被on_start調(diào)用唆貌,即可新建一個爬取請求滑潘,這里面有這么幾個參數(shù)第一個參數(shù)是爬取的 URL ,這里自動替換成我們所定義的 URL 锨咙,還有 個參數(shù) callback 语卤,它指定了這個頁面爬取成功后用哪個方法進行解析,代碼中指定為 Idex_page()方法,即如果這個 URL 對應(yīng)的頁面爬取成功了粹舵,那 Response 將交給 index_page ()方法解析
index_page:方法接收這個 Response 參數(shù)钮孵,Response 對接了 pyquery 我們直接調(diào)用 doc()方法傳入相應(yīng)的css 選擇器,就可以像 query 一樣解析此頁面齐婴,代碼中默認是 a[href"="http ”]油猫,也就是說該方法解析了頁面的所有鏈接稠茂,然后將鏈接遍歷柠偶,再次調(diào)用了 crawl ()方法生成了新的爬請求,同時再指定了 callback為detail_page 睬关,意思是說這些頁面爬取成功了就調(diào)用 detail_page方法解析這里诱担,index_page ()實現(xiàn)了兩個功能,一是將爬取的結(jié)果進行解析电爹, 二是生成新的爬取請求
detail age:接收 Response 作為參數(shù)該方法抓取的就是詳情頁的信息蔫仙,不會生成新的請求,只對 Response 對象做解析丐箩,解析之后將結(jié)果以字典的形式返回摇邦,將結(jié)果保存到數(shù)據(jù)庫
- 點擊左上角的pyspider可以返回主控制界面
- 右上角的run可以讓程序開始運行
- 底邊一排功能從左到右依次是 enable css selector helper:快捷替換css選擇器 web:產(chǎn)看該URL下的web界面,html:產(chǎn)看該url下的HTML格式 屎勘,follows:查看一共發(fā)起了多少個請求
2.執(zhí)行點擊run可以看到暫時執(zhí)行后的結(jié)果
3.如果不正確施籍,或者爬取信息有誤,對右邊代碼部分進行調(diào)試
4.最后返回到控制界面概漱,把status改成running丑慎,并點擊后面的run按鈕開始執(zhí)行
分別顯示5m、1h瓤摧、1d5分鐘一小時以及一天的爬取結(jié)果竿裂,綠色表示成功,紅色表示請求次數(shù)太多而放棄照弥,藍色表示等待執(zhí)行
一般的使用過程就是確定爬取的網(wǎng)站腻异,創(chuàng)建項目,在crawl_config里進行配置这揣,在index_page里確定要爬取的url捂掰,在detail_page里確定要爬取的數(shù)據(jù)信息
四、pyspider框架的架構(gòu)和執(zhí)行流程
1.pyspider框架的架構(gòu)
pyspider的架構(gòu)相對簡單分為這么幾個部分:scheduler(調(diào)度器)曾沈、fetcher(抓取器)这嚣、processor(腳本執(zhí)行)任務(wù)由 scheduler發(fā)起調(diào)度,fetcher抓取網(wǎng)頁內(nèi)容塞俱, processor執(zhí)行預(yù)先編寫的py腳本姐帚,輸出結(jié)果或產(chǎn)生新的提鏈任務(wù)(scheduler)、整個爬取的過程受障涯,Monitor(監(jiān)控器)的監(jiān)控罐旗,結(jié)果保存在Result Worker(結(jié)果處理器)中膳汪。
2.每個 pyspider 的項目對應(yīng)一個 Python 腳本,該腳本中定義了一個Handler 類九秀,它有on_start ()方法 爬取首先調(diào)用 on_start ()方法生成最初的抓取任務(wù)遗嗽,然后發(fā)送給 Scheduler進行調(diào)度
3.執(zhí)行流程
- scheduler 將抓取任務(wù)分發(fā)給 Fetcher 進行抓取, Fetcher 執(zhí)行并得到響應(yīng)鼓蜒,隨后將響應(yīng)發(fā)送給Processer
- Processer 處理響應(yīng)并提取 url痹换,新的 URL 生成新的抓取任務(wù),然后通過消息隊列的方式通知Schduler 當前抓取任務(wù)執(zhí)行情況都弹,并將新生成的抓取任務(wù)發(fā)送Scheduler 如果生成了提取結(jié)果娇豫,則將其發(fā)送到結(jié)果隊列等待 Result Worker 處理
- Scheduler 接收到新的抓取任務(wù),然后查詢數(shù)據(jù)庫畅厢,判斷其如果是新的抓取任務(wù)或者是需要重試的任務(wù)就繼續(xù)進行調(diào)度冯痢,然后將其發(fā)送回Fetcher 進行抓取
- 不斷重復(fù)以上流程實現(xiàn)抓取
五、出現(xiàn)錯誤
pyspider安裝和使用出現(xiàn)的一些問題
初學(xué)pyspider跳過的坑
基本上常見的錯誤都在這了框杜!