如果你需要从代理IP平台批量提取IP并自动轮换——比如每分钟从IP池里取一个新IP做轮询监控——手动的复制粘贴是绝对不行的。本文用Python示例代码,演示如何通过API实现代理IP的自动提取、轮换和失败重试。
一、API提取的基本流程
大多数代理IP平台的API都是一个HTTP GET请求:发请求→平台返回一个IP信息→你的脚本用这个IP做代理→用完释放或继续用。结构像这样:
# 伪代码示例
def get_proxy():
resp = requests.get("https://api.proxy.com/get_ip?token=xxx&num=1")
data = resp.json()
return {
"http": f"http://{data['ip']}:{data['port']}",
"https": f"http://{data['ip']}:{data['port']}"
}二、队列调度:不要每次请求都调API
错误姿势:每次发HTTP请求前都先调API取新IP→发请求→用完丢弃。问题:API调用太频繁(被平台限流)、每次取IP都有延迟开销、IP用一次就丢很浪费。
正确姿势:维护一个本地IP队列,一次取10-20个IP存起来,用一个弹一个,用到低于阈值再取一批。
from queue import Queue
import threading
class ProxyPool:
def __init__(self, api_url, min_size=5, batch=10):
self.queue = Queue()
self.api_url = api_url
self.min_size = min_size
self.batch = batch
def get(self):
if self.queue.qsize() < self.min_size:
self._fetch_batch()
return self.queue.get()
def _fetch_batch(self):
resp = requests.get(f"{self.api_url}&num={self.batch}")
for ip_data in resp.json():
proxy = f"http://{ip_data['ip']}:{ip_data['port']}"
self.queue.put(proxy)三、失败重试与IP回收
代理IP不是100%可用的——可能被目标封了、可能刚好离线。脚本需要处理三种情况:
- 连接超时:换下一个IP重试,失败IP放回队列末尾(可能只是暂时不可用);
- HTTP 403/429:IP已被目标封禁,丢弃不再用;
- 连续N个IP都失败:触发告警,可能是目标站更新了反爬策略。
四、限流与并发控制
多个线程共享一个代理IP池时,注意并发安全:用线程安全的队列,控制总并发数(避免代理IP被同一时间发起太多连接而被识别),设置请求间隔。
五、实际业务落地建议
- 先把调度逻辑写成一个独立的ProxyPool类,方便在多个项目里复用;
- 加一个简单的监控:记录每个IP的使用次数、成功率、平均响应时间,淘汰质量差的IP;
- 如果业务量大,可以考虑代理IP的隧道代理模式——平台自动轮换IP,省去自己维护池子的麻烦。
更多代理IP平台和工具可以看极跃IP资源导航。






