Python 爬虫代理 IP 的池子该怎么自己管-易代理

本站 · 2026-10-15 最新资讯 3

为啥有些团队不用动态网关

动态转发网关省事,但有些场景要自己控。比如按业务打标、按城市筛、按失败率淘汰、把某些地址锁给指定任务。这时候就得自己维护 Python 爬虫代理 IP 池。

池子不是“存一堆地址”这么简单。它要有获取、校验、使用、失败扣分、冷却、补充、统计这几件事。

池子的最小模型

pythonimport timeimport randomclass ProxyPool:    def __init__(self):        self.items = {}  # addr -> meta

    def add(self, addr):        self.items[在] = {            "addr": addr,            "score": 100,            "last_used": 0,            "cool_until": 0,
        }    def get(self):
        now = time.time()
        ready = [
            m for m in self.items.values()            if m["score"] > 0 and m["cool_until"] <= now
        ]        if not ready:            return None
        m = random.choice(ready)
        m["last_used"] = now        return m["addr"]    def fail(self, addr):
        m = self.items.get(addr)        if m:
            m["score"] -= 20
            m["cool_until"] = time.time() + 300

    def ok(self, addr):
        m = self.items.get(addr)        if m:
            m["score"] = min(100, m["score"] + 5)

Python 爬虫代理 IP 池的核心不是“多”,是“脏了能踢、好了能回、分数能反映历史”。

入库前先校验

从 API 拉下来的地址别直接上生产。先打一个轻量检测接口:

pythondef check_proxy(addr):
    proxies = {"http": f"http://{addr}", "https": f"http://{addr}"}    try:
        r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=8)        return r.status_code == 200
    except Exception:        return False

不校验就上量,爬虫前十分钟全在超时。Python 爬虫代理 IP 的可用率,是验出来的,不是服务商海报写出来的。

按业务打标签

池子可以带 tag:

pythonself.items[addr] = {    "addr": addr,    "tags": ["news"],    "score": 100,
}

新闻采集取 news 标签,价格监控取 price 标签,SERP 取 serp 标签。不同业务用不同出口,避免一类任务把另一类任务拖下水。

定时补充和定时瘦身

pythondef refresh_pool(pool):
    new_list = pull_from_api(count=20)    for addr in new_list:        if check_proxy(addr):
            pool.add(addr)

    dead = [a for a, m in pool.items.items() if m["score"] <= 0]    for a in dead:        del pool.items[a]

Python 爬虫代理 IP 池要流动起来。只进不出,池子会腐烂;只出不进,任务会饿死。

和 Scrapy、aiohttp 怎么接

Scrapy 中间件里:

pythonproxy = pool.get()
request.meta["proxy"] = f"http://{proxy}"request.meta["_pool_addr"] = proxy

响应失败里:

pythonpool.fail(request.meta.get("_pool_addr"))

aiohttp 里同理,每次请求前拿一个地址,异常就扣分。Python 爬虫代理 IP 池不是独立组件,它要嵌进框架生命周期里才值钱。

小结

自己管池子比用网关累,但控制力强。评分、冷却、标签、校验、补充、瘦身,这六件事做全,Python 爬虫代理 IP 池才是生产资产,不是 Excel 里的一列地址。


相关标签:代理ip,ip代理,http代理,代理服务器ip,开放代理,文档中心,新闻,动态住宅ip,ip池,socks5代理

微信客服

微信客服

扫码添加客服

QQ 咨询

新用户专享 注册免费送 IP 5000个 高质量 IP 免费领取 立即领取