codecamp

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

网络不稳定、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. 观察终端:错误信息、状态码一目了然。
Colly 基础示例:5 分钟写出你的第一个爬虫
Colly 登录爬取:轻松搞定需要登录的网站
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }