W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
爬得太快被封?用 Colly 的
LimitRule
一鍵限速:固定延遲 + 并發(fā)上限,像老司機一樣穩(wěn)!
爬 編程獅首頁,限制并發(fā) 2 線程、固定 3 秒延遲:
package main
import (
"fmt"
"time"
"github.com/gocolly/colly/v2"
"github.com/gocolly/colly/v2/debug"
)
func main() {
// 1. 創(chuàng)建收集器:開異步 + 開調(diào)試
c := colly.NewCollector(
colly.Async(true),
colly.Debugger(&debug.LogDebugger{}),
)
// 2. 限速規(guī)則:并發(fā) 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. 連續(xù)訪問 5 次
for i := 0; i < 5; i++ {
c.Visit(fmt.Sprintf("http://m.o2fo.com/index%d.html", i))
}
// 5. 等待全部完成
c.Wait()
}
運行效果(每 3 秒一條):
訪問: http://m.o2fo.com/index0.html
(3 秒后)
訪問: http://m.o2fo.com/index1.html
...
參數(shù) | 含義 | 推薦值 |
---|---|---|
DomainGlob |
作用域名,支持通配 | "*w3cschool*" |
Parallelism |
最大并發(fā)線程數(shù) | 1~3(小站) 5~10(大站) |
Delay |
固定延遲 | 1~5 秒 |
RandomDelay |
隨機延遲(0~n) | 與 Delay 二選一 |
只需設(shè)置
Delay
或RandomDelay
任意一個,不要同時設(shè)。
// 固定 2 秒延遲,并發(fā) 4
c.Limit(&colly.LimitRule{
DomainGlob: "*",
Parallelism: 4,
Delay: 2 * time.Second,
})
癥狀 | 原因 | 解決 |
---|---|---|
還是 429/503 | 延遲太短 | 把 Delay 調(diào)到 3~5 秒 |
爬得巨慢 | 并發(fā)太低 | 適當提高 Parallelism |
日志刷屏 | 調(diào)試太吵 | 去掉 colly.Debugger |
rate.go
。 Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: