W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
單 IP 被封?用 Colly 官方
proxy.RoundRobinProxySwitcher
,一行代碼實(shí)現(xiàn)多代理輪詢,輕松偽裝成“千軍萬(wàn)馬”。
爬 編程獅首頁(yè),并通過(guò) 2 個(gè)本地代理輪流訪問(wèn):
package main
import (
"log"
"time"
"github.com/gocolly/colly/v2"
"github.com/gocolly/colly/v2/proxy"
)
func main() {
// 創(chuàng)建收集器,允許重復(fù)訪問(wèn)同一 URL
c := colly.NewCollector(
colly.AllowURLRevisit(),
colly.AllowedDomains("m.o2fo.com"),
)
// 1. 設(shè)置代理池(socks5/http 均可)
rp, err := proxy.RoundRobinProxySwitcher(
"socks5://127.0.0.1:1337",
"socks5://127.0.0.1:1338",
"http://127.0.0.1:8080", // 也可混用 HTTP 代理
)
if err != nil {
log.Fatal("代理設(shè)置失?。?, err)
}
c.SetProxyFunc(rp)
// 2. 打印每次使用的代理和返回內(nèi)容
c.OnResponse(func(r *colly.Response) {
log.Printf("代理:%s | 返回長(zhǎng)度:%d 字節(jié) | URL:%s",
r.Request.ProxyURL, len(r.Body), r.Request.URL)
})
// 3. 連續(xù)訪問(wèn) 5 次,觀察 IP 輪換
for i := 0; i < 5; i++ {
c.Visit("http://m.o2fo.com/")
time.Sleep(1 * time.Second) // 避免太快
}
}
步驟 | 操作 | 說(shuō)明 |
---|---|---|
① 啟動(dòng)代理 | ssh -D 1337 user@your-vps 或本地 Clash |
得到 socks5 代理 |
② 換域名 | 把 AllowedDomains 換成你要爬的站 |
避免越界訪問(wèn) |
③ 運(yùn)行 | go run main.go |
終端會(huì)顯示不同代理 IP 輪換 |
想要“隨機(jī) + 失敗剔除”?自己寫選擇器:
import (
"math/rand"
"net/url"
)
var proxies = []*url.URL{
{Scheme: "http", Host: "127.0.0.1:8080"},
{Scheme: "socks5", Host: "127.0.0.1:1337"},
}
func randomProxy(r *http.Request) (*url.URL, error) {
return proxies[rand.Intn(len(proxies))], nil
}
c.SetProxyFunc(randomProxy)
問(wèn)題 | 原因 | 解決 |
---|---|---|
proxy connect failed |
代理未啟動(dòng)或地址寫錯(cuò) | 確認(rèn)代理端口 netstat -tlnp |
403 / 503 依舊 | 目標(biāo)站檢測(cè) UA/Referer | 加官方擴(kuò)展 extensions.RandomUserAgent(c) |
速度慢 | 代理帶寬低 | 換更高帶寬節(jié)點(diǎn)或增加代理數(shù) |
proxy.go
。 go run proxy.go
。 Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: