pyspider web爬蟲框架的使用

一、為什么要使用pyspider?

我們很好奇,我們明明有了Scrapy框架,為什么還要使用pyspider框架呢?我們說兩點(diǎn)

  • pyspider的優(yōu)點(diǎn),它有這么幾個(gè)優(yōu)點(diǎn)
    1.提供WebUI界面,調(diào)試爬蟲很方便
    2.可以很方便的進(jìn)行爬取的流程監(jiān)控和爬蟲項(xiàng)目管理
    3.支持常見的數(shù)據(jù)庫(kù)
    4.支持使用PhantomJS,可以抓取JavaScript頁(yè)面
    5.支持優(yōu)先級(jí)定制和定時(shí)爬取等功能
  • 和Scrapy的比較
    1.pyspider 提供 WebUI,Scrapy它采用的是代碼和命令行操作,但可以通過對(duì)接 Portia 現(xiàn)可視化配置
    2.pyspider 支持 PhantomJS來進(jìn)行 JavaScript 誼染頁(yè)面的采集 Scrapy 可以對(duì)接 Sc rapy-Splash組件,這需要額外配置
    3.pyspider 中內(nèi)置pyquery 作為選擇器而Scrapy 接了XPath 對(duì)接css選擇器和正則匹配
    4.pyspider的可擴(kuò)展程度不高,Scrapy可以通過對(duì)接其他的模塊實(shí)現(xiàn)強(qiáng)大的功能,模塊之間的耦合度低
  • 總結(jié)
    所以如果要快速實(shí)現(xiàn)一個(gè)頁(yè)面的抓取,推薦使用 pyspider,開發(fā)更加便捷,如果要應(yīng)對(duì)反爬程度很強(qiáng)、超大規(guī)模的抓取,推薦使用 Scrapy ,

二、pyspider的安裝

pyspider的安裝相對(duì)簡(jiǎn)單,不需要安裝一些列的依賴庫(kù)直接使用

pip install pyspider

然后等待安裝成功就行,也可以使用源碼安裝 pyspider源碼

三、pyspider的簡(jiǎn)單使用

1.安裝之后先驗(yàn)證是否安裝成功,在CMD下輸入

pyspider

或者

pyspider all

兩者是一樣的,新的pyspider框架已經(jīng)整合了,所以使用pyspider就好

image

出現(xiàn)這個(gè)則說明運(yùn)行成功,運(yùn)行在5000端口,當(dāng)然這個(gè)可以改

2.打開瀏覽器,輸入

http://localhost:5000/

進(jìn)入pyspider控制臺(tái)

image

出現(xiàn)這個(gè)則說明你的框架沒什么問題!??!

我把框架的執(zhí)行分為了這么幾部分

  • 創(chuàng)建

  • 執(zhí)行

  • 調(diào)試

  • 結(jié)果
    我們分別來一步步說一下
    1.創(chuàng)建

    image

    點(diǎn)擊create開始創(chuàng)建

    image

    彈出兩個(gè)東西,project name 是你項(xiàng)目的名稱 start url 是你要爬取的鏈接,分別輸入以后,再次點(diǎn)擊右下角的create,完成創(chuàng)建

    image

    整個(gè)右邊部分,分為這么幾個(gè)東西
    1.右上角的save 是保存按鈕,更改代碼之后幾點(diǎn)保存

    2.左上角的#后面的是你創(chuàng)建的一些參數(shù),如創(chuàng)建時(shí)間,爬取域名,編碼格式等
    3.下面的代碼部分是創(chuàng)建項(xiàng)目自動(dòng)生成的,你可以添加一些你自己的東西,我們?cè)谶@里完成整個(gè)項(xiàng)目的爬取、解析、以及保存等工作

    • crawl_config:項(xiàng)目的所有爬取配置統(tǒng)一定義到這里,如定義 Headers 、設(shè)置代理等,配置之后全局生效

    • @every:設(shè)置定時(shí)爬取的時(shí)間

    • on_start:爬取入口,初始的爬取請(qǐng)求會(huì)在這里產(chǎn)生

    • self.crawl:該方法是爬取的主方法,被on_start調(diào)用,即可新建一個(gè)爬取請(qǐng)求,這里面有這么幾個(gè)參數(shù)第一個(gè)參數(shù)是爬取的 URL ,這里自動(dòng)替換成我們所定義的 URL ,還有 個(gè)參數(shù) callback ,它指定了這個(gè)頁(yè)面爬取成功后用哪個(gè)方法進(jìn)行解析,代碼中指定為 Idex_page()方法,即如果這個(gè) URL 對(duì)應(yīng)的頁(yè)面爬取成功了,那 Response 將交給 index_page ()方法解析

    • index_page:方法接收這個(gè) Response 參數(shù),Response 對(duì)接了 pyquery 我們直接調(diào)用 doc()方法傳入相應(yīng)的css 選擇器,就可以像 query 一樣解析此頁(yè)面,代碼中默認(rèn)是 a[href"="http ”],也就是說該方法解析了頁(yè)面的所有鏈接,然后將鏈接遍歷,再次調(diào)用了 crawl ()方法生成了新的爬請(qǐng)求,同時(shí)再指定了 callback為detail_page ,意思是說這些頁(yè)面爬取成功了就調(diào)用 detail_page方法解析這里,index_page ()實(shí)現(xiàn)了兩個(gè)功能,一是將爬取的結(jié)果進(jìn)行解析, 二是生成新的爬取請(qǐng)求

    • detail age:接收 Response 作為參數(shù)該方法抓取的就是詳情頁(yè)的信息,不會(huì)生成新的請(qǐng)求,只對(duì) Response 對(duì)象做解析,解析之后將結(jié)果以字典的形式返回,將結(jié)果保存到數(shù)據(jù)庫(kù)

    image
  • 點(diǎn)擊左上角的pyspider可以返回主控制界面

  • 右上角的run可以讓程序開始運(yùn)行

  • 底邊一排功能從左到右依次是 enable css selector helper:快捷替換css選擇器 web:產(chǎn)看該URL下的web界面,html:產(chǎn)看該url下的HTML格式 ,follows:查看一共發(fā)起了多少個(gè)請(qǐng)求

2.執(zhí)行點(diǎn)擊run可以看到暫時(shí)執(zhí)行后的結(jié)果
3.如果不正確,或者爬取信息有誤,對(duì)右邊代碼部分進(jìn)行調(diào)試
4.最后返回到控制界面,把status改成running,并點(diǎn)擊后面的run按鈕開始執(zhí)行
分別顯示5m、1h、1d5分鐘一小時(shí)以及一天的爬取結(jié)果,綠色表示成功,紅色表示請(qǐng)求次數(shù)太多而放棄,藍(lán)色表示等待執(zhí)行

一般的使用過程就是確定爬取的網(wǎng)站,創(chuàng)建項(xiàng)目,在crawl_config里進(jìn)行配置,在index_page里確定要爬取的url,在detail_page里確定要爬取的數(shù)據(jù)信息

四、pyspider框架的架構(gòu)和執(zhí)行流程

1.pyspider框架的架構(gòu)
pyspider的架構(gòu)相對(duì)簡(jiǎn)單分為這么幾個(gè)部分:scheduler(調(diào)度器)、fetcher(抓取器)、processor(腳本執(zhí)行)任務(wù)由 scheduler發(fā)起調(diào)度,fetcher抓取網(wǎng)頁(yè)內(nèi)容, processor執(zhí)行預(yù)先編寫的py腳本,輸出結(jié)果或產(chǎn)生新的提鏈任務(wù)(scheduler)、整個(gè)爬取的過程受,Monitor(監(jiān)控器)的監(jiān)控,結(jié)果保存在Result Worker(結(jié)果處理器)中。
2.每個(gè) pyspider 的項(xiàng)目對(duì)應(yīng)一個(gè) Python 腳本,該腳本中定義了一個(gè)Handler 類,它有on_start ()方法 爬取首先調(diào)用 on_start ()方法生成最初的抓取任務(wù),然后發(fā)送給 Scheduler進(jìn)行調(diào)度

3.執(zhí)行流程

  • scheduler 將抓取任務(wù)分發(fā)給 Fetcher 進(jìn)行抓取, Fetcher 執(zhí)行并得到響應(yīng),隨后將響應(yīng)發(fā)送給Processer
  • Processer 處理響應(yīng)并提取 url,新的 URL 生成新的抓取任務(wù),然后通過消息隊(duì)列的方式通知Schduler 當(dāng)前抓取任務(wù)執(zhí)行情況,并將新生成的抓取任務(wù)發(fā)送Scheduler 如果生成了提取結(jié)果,則將其發(fā)送到結(jié)果隊(duì)列等待 Result Worker 處理
  • Scheduler 接收到新的抓取任務(wù),然后查詢數(shù)據(jù)庫(kù),判斷其如果是新的抓取任務(wù)或者是需要重試的任務(wù)就繼續(xù)進(jìn)行調(diào)度,然后將其發(fā)送回Fetcher 進(jìn)行抓取
  • 不斷重復(fù)以上流程實(shí)現(xiàn)抓取

五、出現(xiàn)錯(cuò)誤

pyspider安裝和使用出現(xiàn)的一些問題
初學(xué)pyspider跳過的坑
基本上常見的錯(cuò)誤都在這了!

參考鏈接:http://www.itdecent.cn/p/39c7371dd6c2

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 pyspider是支持WebUI的,支持任務(wù)監(jiān)控,項(xiàng)目管理,以及多種數(shù)據(jù)庫(kù)的一個(gè)強(qiáng)大的爬蟲框架,這個(gè)真的很好...
    Wangthirteen閱讀 58,940評(píng)論 -1 22
  • 一,pyspider pyspider的設(shè)計(jì)基礎(chǔ)是:以python腳本驅(qū)動(dòng)的抓取環(huán)模型爬蟲 通過python腳本進(jìn)...
    學(xué)而不厭888閱讀 953評(píng)論 0 1
  • 整理了Node.js、PHP、Go、JAVA、Ruby、Python等語(yǔ)言的爬蟲框架。不知道讀者們都用過什么爬蟲框...
    SeanCheney閱讀 5,808評(píng)論 0 16
  • 假如我是一滴水, 我不希望 匯入江河海洋 也不是山林中 濃濃的朝霧 也不是花蕾上 淺淺的露珠 我寧愿是一滴 晶瑩的...
    第六只眼閱讀 995評(píng)論 4 19
  • 今天我不作詩(shī) 我不想作詩(shī) 我只想 舒寫我的心情 但沉重的手怎么也提不起筆 窗外的風(fēng)格外的凄涼 夜市眾人心歡 襯托我...
    箬竹_泠萱閱讀 226評(píng)論 0 0

友情鏈接更多精彩內(nèi)容