代理輪換器
當爬蟲需要將請求分散到多個代理,並避免持續使用已故障的代理時,請使用此技能。輪換器會分配下一個健康代理,記錄失敗次數,並在代理失敗過多次後將其放入冷卻區,待冷卻時間結束後再給予一次機會。您需要自行提供代理清單;本技能不會內建任何代理。
何時呼叫
- 使用者說:「輪換代理」、「將請求分散到多個代理」、「不要再被 IP 封鎖了」、「透過另一個代理重試」。
- 對話中的程式碼需要發出大量對外請求,並需將請求分散到代理池中。
何時不應呼叫
- 單一連線即可滿足需求,或目標網站明確允許您目前的請求量——輪換代理只會增加不必要的複雜性。
- 意圖規避明確的封鎖或濫用服務;請確保使用方式符合目標服務的使用條款。
具體範例
使用者輸入:
我有 5 個代理。以循環輪詢方式使用它們,並跳過任何開始失敗的代理。
輸出:
import requests
from rotator import ProxyRotator
rot = ProxyRotator.from_env() # PROXY_POOL="http://h1:8080,socks5://h2:1080,..."
for url in urls:
p = rot.get() # 下一個健康代理
try:
r = requests.get(url, proxies=p.as_dict(), timeout=15)
rot.report(p, ok=r.ok) # 將結果回饋給代理池,讓其自動修復
except Exception:
rot.report(p, ok=False) # 失敗次數過多 → 代理將被放入冷卻區
應用的模式
- 從環境變數或已加入
.gitignore的檔案載入代理清單——切勿提交真實的代理 URL 或憑證。 - 每次請求後務必呼叫
report(proxy, ok=...),使失敗代理自動被隔離。 - 根據目標調整
max_fails和cooldown參數;較短的冷卻時間可恢復不穩定的代理,較長的冷卻時間則會淘汰品質較差的代理。 - 在進行大量批次請求前,先執行
health_check以預先隔離已故障的代理。 - 妥善處理「無健康代理可用」的錯誤——採取退避重試策略,而非直接讓程式崩潰。
參考檔案:assets/rotator.py。
來源
本技能源自作者在多個自動化專案中的實際生產經驗提煉而成。v1.0.0。 另見:[[playwright-login-session]]、[[pipeline-orchestrator]]、[[cron-dispatch]]。
→ 使用 Trawlkit 建置完整的可執行機器人。