Colly 限速实战:给爬虫装上“安全油门”

2025-07-14 16:45 更新

爬得太快被封?用 Colly 的 LimitRule 一键限速:固定延迟 + 并发上限,像老司机一样稳!

一、示例:

编程狮首页,限制并发 2 线程、固定 3 秒延迟:

package main


import (
    "fmt"
    "time"


    "github.com/gocolly/colly/v2"
    "github.com/gocolly/colly/v2/debug"
)


func main() {
    // 1. 创建收集器:开异步 + 开调试
    c := colly.NewCollector(
        colly.Async(true),
        colly.Debugger(&debug.LogDebugger{}),
    )


    // 2. 限速规则:并发 2 + 固定 3 秒延迟
    c.Limit(&colly.LimitRule{
        DomainGlob:  "*w3cschool*", // 仅对编程狮生效
        Parallelism: 2,             // 最多 2 个 goroutine
        Delay:       3 * time.Second, // 每次请求后固定等待 3 秒
    })


    // 3. 打印访问日志
    c.OnRequest(func(r *colly.Request) {
        fmt.Println("访问:", r.URL.String())
    })


    // 4. 连续访问 5 次
    for i := 0; i < 5; i++ {
        c.Visit(fmt.Sprintf("https://www.w3cschool.cn/index%d.html", i))
    }


    // 5. 等待全部完成
    c.Wait()
}

运行效果(每 3 秒一条):

访问: https://www.w3cschool.cn/index0.html
(3 秒后)
访问: https://www.w3cschool.cn/index1.html
...

二、4 大参数速记表

参数 含义 推荐值
DomainGlob 作用域名,支持通配 "*w3cschool*"
Parallelism 最大并发线程数 1~3(小站) 5~10(大站)
Delay 固定延迟 1~5 秒
RandomDelay 随机延迟(0~n) 与 Delay 二选一

只需设置 DelayRandomDelay 任意一个,不要同时设

三、实战模板:直接套

// 固定 2 秒延迟,并发 4
c.Limit(&colly.LimitRule{
    DomainGlob:  "*",
    Parallelism: 4,
    Delay:       2 * time.Second,
})

四、常见问题 30 秒排查

症状 原因 解决
还是 429/503 延迟太短 把 Delay 调到 3~5 秒
爬得巨慢 并发太低 适当提高 Parallelism
日志刷屏 调试太吵 去掉 colly.Debugger

五、1 分钟动手实验

  1. 打开 终端 → 新建 rate.go
  2. 复制上方“中文注释”代码 → 运行。
  3. 观察终端:每条日志间隔 3 秒,爬虫稳如老狗。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号