爬蟲框架:go_spider

簡介
本項目基于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 processer func (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() }
項目安裝與示例執行
- 安裝本包和依賴包
go get github.com/hu17889/go_spider go get github.com/PuerkitoBio/goquery go get github.com/bitly/go-simplejson
示例執行:
- 編譯:go install github.com/hu17889/go_spider/example/github_repo_page_processor
- 執行:./bin/github_repo_page_processor
展示一個簡單爬蟲示例
示例的功能是爬取https://github.com/hu17889?tab=repositories下面的項目以及項目詳情頁的相關信息,并將內容輸出到標準輸出。
一般在自己的爬蟲main包中需要實現爬蟲創建,初始化,以及PageProcesser模塊的繼承實現。可以實現自己的子模塊或者使用項目中已經存在的子模塊,通過Spider對象中相應的Set或者Add函數將模塊引入爬蟲。本項目支持鏈式調用。
spider.NewSpider(NewMyPageProcesser(), "TaskName"). // 創建PageProcesser和Spider,設置任務名稱 AddUrl("https://github.com/hu17889?tab=repositories", "html"). // 加入初始爬取鏈接,需要設置爬取結果類型,方便找到相應的解析器 AddPipeline(pipeline.NewPipelineConsole()). // 引入PipelineConsole輸入結果到標準輸出 SetThreadnum(3). // 設置爬取參數:并發個數 Run() // 開始執行
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!