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 二选一 |
只需设置
Delay
或RandomDelay
任意一个,不要同时设。
三、实战模板:直接套
// 固定 2 秒延迟,并发 4
c.Limit(&colly.LimitRule{
DomainGlob: "*",
Parallelism: 4,
Delay: 2 * time.Second,
})
四、常见问题 30 秒排查
症状 | 原因 | 解决 |
---|---|---|
还是 429/503 | 延迟太短 | 把 Delay 调到 3~5 秒 |
爬得巨慢 | 并发太低 | 适当提高 Parallelism |
日志刷屏 | 调试太吵 | 去掉 colly.Debugger |
五、1 分钟动手实验
- 打开 终端 → 新建
rate.go
。 - 复制上方“中文注释”代码 → 运行。
- 观察终端:每条日志间隔 3 秒,爬虫稳如老狗。
以上内容是否对您有帮助:
更多建议: