go_spider

本項目基於golang開發,是一個開放的垂直領域的爬蟲框架,框架中將各個功能模組區分開,方便使用者重新實現子模組,進而構建自己垂直方方向的爬蟲。

基本信息,執行過程,

基本信息

本項目基於golang開發,是一個開放的垂直領域的爬蟲框架,框架中將各個功能模組區分開,方便使用者重新實現子模組,進而構建自己垂直方方向的爬蟲。
本項目將爬蟲的各個功能流程區分成Spider模組(主控),Downloader模組(下載器),PageProcesser模組(頁面分析),Scheduler模組(任務佇列),Pipeline模組(結果輸出);

執行過程

  1. Spider模組從Scheduler模組中獲取包含待抓取url的Request對象,啟動一個協程,一個協程執行一次爬取過程,此處我們把協程也看成Spider,Spider把Request對象傳入Downloader,Downloader下載該Request對象中url所對應的頁面或者其他類型的數據,生成Page對象;
  2. Spider調用PageProcesser模組解析Page對象中的頁面數據,並存入Page對象中的PageItems中(以Key-Value對的形式保存),同時存入解析結果中的待抓取連結,Spider會將待抓取連結存入Scheduler模組中的Request佇列中;
  3. Spider調用Pipeline模組輸出Page中的PageItems的結果;
  4. 執行步驟1,直至Scheduler中所有連結被處理完成,則Spider被掛起等待下一個待抓取連結或者終止。
go_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()}

相關詞條

熱門詞條

聯絡我們