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 分钟实验

  1. 打开 Go 环境 → 新建 main.go
  2. 复制“组合套餐”代码 → 运行。
  3. 观察终端:UA 随机、Referer 自动、深度受控,全部生效!
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号