Colly 扩展插件:给爬虫装上“瑞士军刀”
2025-07-11 15:31 更新
官方扩展 = 一行代码 + 零配置,立刻拥有随机 UA、自动 Referer、限速等实用功能。本文带你 3 分钟全部学会!
一、什么是 Colly 扩展?
扩展(Extensions)是官方随框架一起发布的“小工具箱”,开箱即用,无需自己造轮子。
目前常用 4 件套:
扩展名 | 作用 | 一行代码 |
---|---|---|
RandomUserAgent | 每次请求随机 UA,防封 | extensions.RandomUserAgent(c) |
Referer | 自动把上一页 URL 设为 Referer | extensions.Referer(c) |
URLLengthFilter | 过滤超长 URL | extensions.URLLengthFilter(c, 2083) |
MaxDepth | 限制爬取深度 | extensions.MaxDepth(c, 3) |
二、快速上手:3 行代码跑 Demo
package main
import (
"log"
"github.com/gocolly/colly/v2"
"github.com/gocolly/colly/v2/extensions"
)
func main() {
c := colly.NewCollector()
// 1. 开启随机 UA
extensions.RandomUserAgent(c)
// 2. 自动设置 Referer
extensions.Referer(c)
// 3. 限制深度 2 层
extensions.MaxDepth(c, 2)
c.OnResponse(func(r *colly.Response) {
log.Printf("UA=%s Referer=%s\n",
r.Request.Headers.Get("User-Agent"),
r.Request.Headers.Get("Referer"))
})
c.Visit("https://www.w3cschool.cn/")
}
运行结果(每次 UA 都不同):
UA=Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...
Referer=https://www.w3cschool.cn/
三、组合套餐:真实项目模板
c := colly.NewCollector(
colly.Async(true),
colly.UserAgent("编程狮爬虫/1.0"), // 兜底 UA
)
// 官方扩展三连
extensions.RandomUserAgent(c) // 随机 UA
extensions.Referer(c) // 自动 Referer
extensions.MaxDepth(c, 3) // 最多 3 层
// 自定义限速
c.Limit(&colly.LimitRule{
Parallelism: 16,
Delay: 200 * time.Millisecond,
})
四、自己动手写扩展
只要实现 func(*colly.Collector)
就能成为官方级扩展:
// 示例:打印每次请求耗时
func TimerExtension(c *colly.Collector) {
c.OnRequest(func(r *colly.Request) {
r.Ctx.Put("start", time.Now())
})
c.OnResponse(func(r *colly.Response) {
start := r.Ctx.GetAny("start").(time.Time)
log.Printf("耗时 %v → %s", time.Since(start), r.Request.URL)
})
}
// 使用
TimerExtension(c)
五、1 分钟实验
- 打开 Go 环境 → 新建
main.go
。 - 复制“组合套餐”代码 → 运行。
- 观察终端:UA 随机、Referer 自动、深度受控,全部生效!
以上内容是否对您有帮助:
更多建议: