IP代理池搭建:零基础搭建IP代理池完整教程(附代码)

为什么你需要一个IP代理池

做爬虫或大量HTTP请求时,单一IP容易被网站封禁。
IP代理池能自动收集、验证、轮换可用代理,让你的请求看起来来自不同地区与设备,大大降低被封风险。
本文适合完全没接触过代理池的新手,全程使用开源工具,不需要额外付费。

搭建前准备:环境与依赖

你需要一台具有公网IP的Linux服务器(CentOS 7/Ubuntu 20.04均可),并确认以下工具已安装:

  • Python 3.6+(检查命令 python3 --version
  • pip3(检查命令 pip3 --version
  • Redis 服务器(用于存储代理IP列表,推荐版本5.0+)
  • requestslxml 两个Python库

安装Redis(以Ubuntu为例)

sudo apt update
sudo apt install redis-server -y
sudo systemctl enable redis
sudo systemctl start redis
# 测试连接
redis-cli ping   # 应返回 PONG

安装Python依赖

pip3 install requests lxml redis

代理池核心搭建步骤

1. 编写代理源采集模块

代理IP可以从免费公开网站获取(如快代理、西刺等)。
本例使用 api.proxyscrape.com 作为示例源(接口稳定且无需注册)。

新建文件 proxy_fetcher.py,写入:

import requests

def fetch_proxies():
    url = "https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all"
    try:
        resp = requests.get(url, timeout=10)
        resp.raise_for_status()
        proxies = resp.text.strip().split('\r\n')
        return [p.strip() for p in proxies if p.strip()]
    except Exception as e:
        print(f"获取代理失败: {e}")
        return []

2. 验证代理可用性

代理池必须剔除失效IP。
这里用 httpbin.org/ip 检测代理是否连通并返回真实IP。

新建 proxy_validator.py

import requests
from concurrent.futures import ThreadPoolExecutor, as_completed

def check_proxy(proxy):
    test_url = "http://httpbin.org/ip"
    proxies = {"http": f"http://{proxy}", "https": f"http://{proxy}"}
    try:
        resp = requests.get(test_url, proxies=proxies, timeout=5)
        if resp.status_code == 200:
            return proxy
    except:
        pass
    return None

def validate_all(proxy_list, max_workers=20):
    valid = []
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        future_to_proxy = {executor.submit(check_proxy, p): p for p in proxy_list}
        for future in as_completed(future_to_proxy):
            result = future.result()
            if result:
                valid.append(result)
    return valid

3. 落地到Redis并定时更新

创建 proxy_pool.py 作为主程序:

import redis
import time
from proxy_fetcher import fetch_proxies
from proxy_validator import validate_all

# 配置Redis连接(默认本地6379)
r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)
REDIS_KEY = "proxy_pool"

def update_pool():
    print("开始拉取代理...")
    raw = fetch_proxies()
    print(f"获取到 {len(raw)} 个代理")
    valid = validate_all(raw)
    print(f"验证通过 {len(valid)} 个")
    if valid:
        r.delete(REDIS_KEY)
        r.sadd(REDIS_KEY, *valid)   # 使用Set去重
        # 设置过期时间,确保不会残留大量无效IP
        r.expire(REDIS_KEY, 1800)   # 30分钟后自动清空
    return len(valid)

def get_proxy():
    return r.srandmember(REDIS_KEY)  # 随机取出一个

if __name__ == "__main__":
    # 首次更新
    count = update_pool()
    print(f"代理池初始数量: {count}")
    # 每10分钟更新一次
    while True:
        time.sleep(600)
        update_pool()

4. 启动代理池

python3 proxy_pool.py &

程序会后台运行,每10分钟拉取并验证一次代理。

避坑说明:新手最容易犯的五个错误

  1. 免费代理稳定性差:不要一次只用一个代理,建议配合轮询或重试机制。
  2. Redis连接超时:确保服务器防火墙放行6379端口,或者使用密码连接。
  3. 代理去重不彻底:上面用了Redis Set存储,能自动去重。如果换用List需要手动去重。
  4. 验证目标单一:仅用 httpbin.org 验证可能漏掉一些对被访问网站也有效的代理。建议实际爬取目标网站作为二次验证。
  5. 更新频率过低:免费代理存活时间短,建议每5-10分钟更新一次。

如何验证代理池是否正常工作

编写测试脚本 test_pool.py

import requests
from proxy_pool import get_proxy

def test():
    proxy = get_proxy()
    if not proxy:
        print("代理池为空")
        return
    print(f"使用的代理: {proxy}")
    try:
        resp = requests.get("http://ip.sb", proxies={"http": f"http://{proxy}"}, timeout=10)
        print(f"返回IP: {resp.text.strip()}")
    except Exception as e:
        print(f"请求失败: {e}")

if __name__ == "__main__":
    test()

执行 python3 test_pool.py,如果看到输出中的IP与代理地址一致,说明代理池成功工作。

常见问题解答

Q:没有公网服务器怎么办? 可以用本地虚拟机或云厂商的轻量应用服务器(2核2G够用)。

Q:代理池只有HTTP没有HTTPS支持? 上面的验证模块同时做了HTTPS测试(通过https://httpbin.org/ip),返回的代理都是双协议可用。

Q:如何扩展更多代理源?fetch_proxies 中增加多个来源,合并列表再验证即可。
注意每个源不要请求太频繁。

如果你在搭建IP代理池过程中遇到其他问题,建议先检查Redis状态、网络连通性,再查看代码日志。
实践几次后就能根据自身业务调整IP源和验证逻辑。

分享到:
上一篇
新手也能学会的反爬虫技术部署指南(Nginx +
下一篇
跨境多账号服务器的搭建与多IP配置教程
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意