官方擴(kuò)展 = 一行代碼 + 零配置,立刻擁有隨機(jī) UA、自動 Referer、限速等實(shí)用功能。本文帶你 3 分鐘全部學(xué)會!
擴(kuò)展(Extensions)是官方隨框架一起發(fā)布的“小工具箱”,開箱即用,無需自己造輪子。
目前常用 4 件套:
擴(kuò)展名 | 作用 | 一行代碼 |
---|---|---|
RandomUserAgent | 每次請求隨機(jī) UA,防封 | extensions.RandomUserAgent(c) |
Referer | 自動把上一頁 URL 設(shè)為 Referer | extensions.Referer(c) |
URLLengthFilter | 過濾超長 URL | extensions.URLLengthFilter(c, 2083) |
MaxDepth | 限制爬取深度 | extensions.MaxDepth(c, 3) |
package main
import (
"log"
"github.com/gocolly/colly/v2"
"github.com/gocolly/colly/v2/extensions"
)
func main() {
c := colly.NewCollector()
// 1. 開啟隨機(jī) UA
extensions.RandomUserAgent(c)
// 2. 自動設(shè)置 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("http://eska-fuses.cn/")
}
運(yùn)行結(jié)果(每次 UA 都不同):
UA=Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...
Referer=http://eska-fuses.cn/
c := colly.NewCollector(
colly.Async(true),
colly.UserAgent("編程獅爬蟲/1.0"), // 兜底 UA
)
// 官方擴(kuò)展三連
extensions.RandomUserAgent(c) // 隨機(jī) UA
extensions.Referer(c) // 自動 Referer
extensions.MaxDepth(c, 3) // 最多 3 層
// 自定義限速
c.Limit(&colly.LimitRule{
Parallelism: 16,
Delay: 200 * time.Millisecond,
})
只要實(shí)現(xiàn) func(*colly.Collector)
就能成為官方級擴(kuò)展:
// 示例:打印每次請求耗時(shí)
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("耗時(shí) %v → %s", time.Since(start), r.Request.URL)
})
}
// 使用
TimerExtension(c)
main.go
。
更多建議: