pyspider的設(shè)計(jì)基礎(chǔ)是:以python腳本驅(qū)動(dòng)的抓取環(huán)模型爬蟲
通過python腳本進(jìn)行結(jié)構(gòu)化信息的提取累颂,follow鏈接調(diào)度抓取控制,實(shí)現(xiàn)最大的靈活性
通過web化的腳本編寫滑进、調(diào)試環(huán)境装处。web展現(xiàn)調(diào)度狀態(tài)
抓取環(huán)模型成熟穩(wěn)定难礼,模塊間相互獨(dú)立颗管,通過消息隊(duì)列連接,從單進(jìn)程到多機(jī)分布式靈活拓展
功能
webui
web的可視化任務(wù)監(jiān)控
web腳本編寫蜂挪,單步調(diào)試
異常捕獲重挑、log捕獲,print捕獲等
scheduler
任務(wù)優(yōu)先級(jí)
周期定時(shí)任務(wù)
流量控制
基于時(shí)間周期 或 前鏈標(biāo)簽(例如更新時(shí)間)的重抓取調(diào)度
fetcher
dataurl支持棠涮,用于假抓取模擬傳遞
method, header, cookie, proxy, etag, last_modified, timeout 等等抓取調(diào)度控制
可以通過適配類似phantomjs的webkit引擎支持渲染
processor
內(nèi)置的pyquery谬哀,以jQuery解析頁面
在腳本中完全控制調(diào)度抓取的各項(xiàng)參數(shù)
可以向后鏈傳遞信息
異常捕獲
pyspider的架構(gòu)主要分為 scheduler(調(diào)度器), fetcher(抓取器), processor(腳本執(zhí)行):
各個(gè)組件間使用消息隊(duì)列連接,除了scheduler是單點(diǎn)的严肪,fetcher 和 processor 都是可以多實(shí)例分布式部署的史煎。 scheduler 負(fù)責(zé)整體的調(diào)度控制
任務(wù)由 scheduler 發(fā)起調(diào)度,fetcher 抓取網(wǎng)頁內(nèi)容驳糯, processor 執(zhí)行預(yù)先編寫的python腳本篇梭,輸出結(jié)果或產(chǎn)生新的提鏈任務(wù)(發(fā)往 scheduler),形成閉環(huán)结窘。
每個(gè)腳本可以靈活使用各種python庫對(duì)頁面進(jìn)行解析很洋,使用框架API控制下一步抓取動(dòng)作充蓝,通過設(shè)置回調(diào)控制解析動(dòng)作隧枫。
參考:https://binux.blog/2014/02/pyspider-architecture/