最近工作主要是一些爬蟲(chóng)相關(guān)的東西,由于公司需要構(gòu)建自己的爬蟲(chóng)框架,在調(diào)研過(guò)程中參考了許多優(yōu)秀的開(kāi)源作品,包括webmagic,webcollector,Spiderman等,通過(guò)學(xué)習(xí)這些優(yōu)秀的源碼獲益良多。
webmagic是一個(gè)簡(jiǎn)單靈活的爬蟲(chóng)框架?;赪ebMagic,你可以快速開(kāi)發(fā)出一個(gè)高效、易維護(hù)的爬蟲(chóng)。(官網(wǎng)地址:http://webmagic.io/)
本篇是webmagic源碼閱讀第一篇,主要探討webmagic的核心機(jī)制,即一個(gè)BFS的爬蟲(chóng)是如何構(gòu)建出來(lái)的。
webmagic分為以下四大組件,Downloader(頁(yè)面下載器),Scheduler(下載調(diào)度器),PageProcessor(頁(yè)面解析器),Pipeline(管道組件,通常做將抓取結(jié)果入庫(kù)寫(xiě)文件等操作)
(圖片來(lái)自官網(wǎng))
以上四個(gè)組件由Spider組件組裝起來(lái),爬取數(shù)據(jù)時(shí)協(xié)同工作。我們先研究webmagic的核心類Spider。
在Spider中的run()方法中可以清晰的看到典型的BFS代碼,通過(guò)一個(gè)循環(huán)不斷地從scheduler中的內(nèi)存隊(duì)列中取一個(gè)抓取任務(wù)(Request)并進(jìn)行相應(yīng)處理(processRequest),如果抓取成功則回調(diào)監(jiān)聽(tīng)器中的onSuccess()方法,失敗則調(diào)用onError()方法,最后將已抓取頁(yè)面的數(shù)量自增。如果隊(duì)列中沒(méi)有任何抓取任務(wù)了,爬蟲(chóng)會(huì)在這里停一會(huì)防止有新的任務(wù)
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26