Colly 错误处理:让爬虫永不“崩溃”

2025-07-11 17:28 更新

网络不稳定、404、503 是常态。给爬虫加 3 行“保险丝”,出错也能优雅记录、自动重试。

一、示例:

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状态码:%d\n错误信息:%v\n",
            r.Request.URL, r.StatusCode, err)
    })


    // 2. 正常解析逻辑(如果无错误才会触发)
    c.OnHTML("title", func(e *colly.HTMLElement) {
        fmt.Println("✅ 页面标题:", e.Text)
    })


    // 3. 故意访问一个 404 页面
    c.Visit("https://www.w3cschool.cn/notfound")
}

运行结果:

❌ 爬取失败:https://www.w3cschool.cn/notfound
状态码:404
错误信息:Not Found

二、3 个实用技巧

技巧 代码片段 作用
自动重试 c.Retry(r, 3, 2*time.Second) 失败后最多重试 3 次,间隔 2 秒
日志文件 log.SetOutput(f) 把错误写进 error.log
继续爬 return nil 出错不 panic,继续下一个 URL

完整重试示例:

c.OnError(func(r *colly.Response, err error) {
    if r.StatusCode >= 500 {
        // 服务器错误,重试
        _ = c.Retry(r, 3, 2*time.Second)
    } else {
        // 客户端错误,记录并跳过
        fmt.Println("跳过不可恢复错误:", err)
    }
})

三、1 分钟实验

  1. 打开 Go 环境 → 新建 main.go
  2. 复制上方“示例” → 把 URL 换成任意不存在的地址 → 运行。
  3. 观察终端:错误信息、状态码一目了然。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号