本項目基於golang開發,是一個開放的垂直領域的爬蟲框架,框架中將各個功能模組區分開,方便使用者重新實現子模組,進而構建自己垂直方方向的爬蟲。
基本信息,執行過程,
基本信息
本項目基於golang開發,是一個開放的垂直領域的爬蟲框架,框架中將各個功能模組區分開,方便使用者重新實現子模組,進而構建自己垂直方方向的爬蟲。
本項目將爬蟲的各個功能流程區分成Spider模組(主控),Downloader模組(下載器),PageProcesser模組(頁面分析),Scheduler模組(任務佇列),Pipeline模組(結果輸出);
執行過程
- Spider模組從Scheduler模組中獲取包含待抓取url的Request對象,啟動一個協程,一個協程執行一次爬取過程,此處我們把協程也看成Spider,Spider把Request對象傳入Downloader,Downloader下載該Request對象中url所對應的頁面或者其他類型的數據,生成Page對象;
- Spider調用PageProcesser模組解析Page對象中的頁面數據,並存入Page對象中的PageItems中(以Key-Value對的形式保存),同時存入解析結果中的待抓取連結,Spider會將待抓取連結存入Scheduler模組中的Request佇列中;
- Spider調用Pipeline模組輸出Page中的PageItems的結果;
- 執行步驟1,直至Scheduler中所有連結被處理完成,則Spider被掛起等待下一個待抓取連結或者終止。
執行過程相應的Spider核心代碼,代碼代表一次爬取過程:
// core processerfunc (this *Spider) pageProcess(req *request.Request) { // Get Page p := this.pDownloader.Download(req) if p == nil { return } // Parse Page this.pPageProcesser.Process(p) for _, req := range p.GetTargetRequests() { this.addRequest(req) } // Output if !p.GetSkip() { for _, pip := range this.pPiplelines { pip.Process(p.GetPageItems(), this) } } this.sleep()}