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 分钟实验
- 打开 Go 环境 → 新建
main.go
。 - 复制上方“示例” → 把 URL 换成任意不存在的地址 → 运行。
- 观察终端:错误信息、状态码一目了然。
以上内容是否对您有帮助:
更多建议: