Colly 錯誤處理:讓爬蟲永不“崩潰”

2025-07-11 17:28 更新

網(wǎng)絡(luò)不穩(wěn)定、404、503 是常態(tài)。給爬蟲加 3 行“保險絲”,出錯也能優(yōu)雅記錄、自動重試。

一、示例:

package main


import (
    "fmt"
    "time"


    "github.com/gocolly/colly/v2"
)


func main() {
    c := colly.NewCollector()


    // 1. 捕獲所有錯誤
    c.OnError(func(r *colly.Response, err error) {
        fmt.Printf("? 爬取失?。?s\n狀態(tài)碼:%d\n錯誤信息:%v\n",
            r.Request.URL, r.StatusCode, err)
    })


    // 2. 正常解析邏輯(如果無錯誤才會觸發(fā))
    c.OnHTML("title", func(e *colly.HTMLElement) {
        fmt.Println("? 頁面標(biāo)題:", e.Text)
    })


    // 3. 故意訪問一個 404 頁面
    c.Visit("http://m.o2fo.com/notfound")
}

運(yùn)行結(jié)果:

? 爬取失?。篽ttp://m.o2fo.com/notfound
狀態(tài)碼:404
錯誤信息:Not Found

二、3 個實用技巧

技巧 代碼片段 作用
自動重試 c.Retry(r, 3, 2*time.Second) 失敗后最多重試 3 次,間隔 2 秒
日志文件 log.SetOutput(f) 把錯誤寫進(jìn) error.log
繼續(xù)爬 return nil 出錯不 panic,繼續(xù)下一個 URL

完整重試示例:

c.OnError(func(r *colly.Response, err error) {
    if r.StatusCode >= 500 {
        // 服務(wù)器錯誤,重試
        _ = c.Retry(r, 3, 2*time.Second)
    } else {
        // 客戶端錯誤,記錄并跳過
        fmt.Println("跳過不可恢復(fù)錯誤:", err)
    }
})

三、1 分鐘實驗

  1. 打開 Go 環(huán)境 → 新建 main.go。
  2. 復(fù)制上方“示例” → 把 URL 換成任意不存在的地址 → 運(yùn)行。
  3. 觀察終端:錯誤信息、狀態(tài)碼一目了然。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號