
最近组里新来的同事接手一个采集项目,问我代理IP怎么接。我发现他跟我当年一样,上来就想自己搞一套IP池管理系统,预估要搞一周。实际上用服务商的产品,接入这事半天就能搞定。
写篇帖子把我踩过的坑和几个场景的配置思路整理一下,希望对有类似需求的朋友有帮助。
动态代理IP就两种接法,选错了后面全白忙:
API提取:你主动调接口拿一批IP回来,自己在代码里做轮换。适合需要精细控制IP分配的场景。
隧道入口:服务商给你一个固定的 host:port,你所有请求都往这个地址发,服务端自动帮你换IP。代码最简单,但灵活性低一些。
怎么选?看你的场景需不需要自己控制IP。需要指定城市、控制单IP使用次数、自定义轮换策略——用API提取。只要求"每次请求换个IP就行"——用隧道。
整个流程4步,没什么玄学。
在服务商控制台生成API链接,几个参数说一下我的经验值:
import requests
api_url = "你的提取链接"
resp = requests.get(api_url)
ip_list = resp.json() # 拿到类似 ["1.2.3.4:8080", "5.6.7.8:9090", ...] 的列表这里有个坑:提取接口有频率限制,通常最少间隔1秒。我见过有人写了个 while True 不停拉IP,直接被封提取权限。别这么干。
拿到IP列表之后,核心逻辑就是每次请求随机选一个代理:
import random
def get_proxy():
proxy = random.choice(ip_list)
return {"http": f"http://{proxy}", "https": f"http://{proxy}"}
resp = requests.get(target_url, proxies=get_proxy(), timeout=10)光这样写能跑,但生产环境不够稳。建议加三个东西:
一是超时重试。timeout建议5-15秒(代理多了一跳,别设太短),超时了换个IP重来。
二是状态码检测。碰到403、429就把当前IP标记为不可用,换下一个。
三是IP池自动补充。维护一个本地IP池,可用IP低于阈值就自动触发API提取。这个阈值我一般设成并发数的2倍。
两种方式:IP白名单和账密验证。
固定服务器部署,在控制台把机器出口IP加白名单就行,最省事。如果你的机器IP会变(比如动态拨号服务器、多台机器轮流跑),就用账密验证,在代理URL里带 user:pass@ip:port。
隧道接入真的简单,两步完事。
proxy = {
"http": "http://用户名:密码@入口地址:端口",
"https": "http://用户名:密码@入口地址:端口"
}
# 每次请求都走这个入口,服务端自动换IP
resp = requests.get(target_url, proxies=proxy, timeout=10)不用管IP列表,不用写轮换逻辑,不用处理IP过期。代码层面就是把 proxies 写死。
但要注意:隧道有默认的并发和带宽限制,比如每秒5个请求、5M带宽。超了会排队甚至被拒。先用默认值跑测试,不够再升级,别上来就开几百个线程往隧道里灌。
下面是我在不同项目里实际用过的配置,供参考。
特点:目标站点分散,采集频率中等,需要灵活控制IP。
我的做法:API提取 + 本地IP池
这个方案的好处是你对IP的使用有完全的掌控力,哪个IP被ban了、用了几次、什么时候该换,都是你说了算。
特点:请求量大,并发高,长时间持续运行。
我的做法:隧道入口 + 控制并发
这类任务最容易犯的错就是线程开太多,超过隧道并发限制,请求被拒还以为是代理质量问题。
特点:平台反爬严格,数据按天更新,需要覆盖多个省市。
我的做法:API提取 + 定向城市
招投标平台的反爬做得比一般网站狠,暴力请求基本秒封。这类场景的核心不是IP换得多快,而是请求频率控制得多稳。
部署完别急着跑全量任务,先做三步验证:
连通性:请求 httpbin.org/ip,确认返回的是代理IP不是你本机IP。听起来很基础,但我真见过有人代理没生效跑了一晚上用的全是自己IP。
可用率:连续发几百次请求,统计成功率。95%以上算合格。低于这个值先查自己的配置,别急着怪代理质量。
场景实测:用目标站点的真实URL做小规模测试(50-100次请求),看响应状态码分布。403/429/503占比超过5%就需要调整请求频率或间隔。
1. API提取调太频
早期写了个定时器每秒拉一次新IP,结果提取接口直接给我限流了。后来改成本地维护IP池 + 按需补充,稳定多了。
2. 忘了配鉴权
写完代码兴冲冲一跑,全是连接被拒。排查半天发现白名单没加。现在我的习惯是:拿到服务商账号第一件事先配鉴权,再写一行代码。
3. timeout设太短
默认的1-2秒超时在代理场景下基本不够用,代理多了一跳网络延迟,正常请求都可能3-4秒。一开始设5秒起步,后面根据实际数据再调。
根据我的经验,大概三成"代理不好用"的问题,最后查下来都是接入配置的锅,跟代理本身没关系。
以上是个人实践总结,不同服务商的具体参数可能有差异,仅供参考。有问题欢迎评论区讨论。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。