你是不是也这样:写个简单爬虫抓点公开数据,刚跑两小时就被目标网站封了IP。
要么掏钱买付费代理——亮数据(Bright Data)这类服务月费动辄几百块,最低档起步也要$50/月;要么反复换IP、加延时、改headers,结果还是被识别、被限流、被验证码卡住。
时间花在调试上,数据却没抓到多少。你根本不知道哪一步出错了——是IP失效?还是请求太像机器人?
其实问题不在代码逻辑,而在基础设施层缺一个“活水池”:代理不是静态列表,而是需要持续更新、验证、淘汰的动态资源。
ProxyPool 就是为这个场景设计的,它不帮你写爬虫,但让爬虫能稳稳落地。
替代了哪些付费软件
它不直接对标某一个具体软件,而是取代了「按量或包月购买代理IP」这一整类付费需求。
你不用再为每个IP付钱,也不用担心用超额度被停服。
比如亮数据(Bright Data),官网显示住宅IP最低套餐$49.99/月,含10GB流量和50个并发连接;企业级方案轻松过千美元每月。而ProxyPool帮你把这件事变成一次部署、长期自动运行。
它不卖IP,只管“养IP”:自动从几十个公开源抓取免费代理,实时验证存活率,剔除失效的,补充新的,整个过程完全免费、全程本地可控。
你不需要理解反爬原理,也能避开最基础的IP封锁;不需要研究代理协议细节,就能拿到可用的 http://host:port 格式地址。
它能干什么
- 自动收集网上散落的免费代理IP,每天定时刷新,不用你手动翻网页找。默认扫描
fetcher/sources/目录下所有enabled=True的 Python 文件,比如kuaidaili.py、89ip.py这些已内置的源,每轮抓取间隔由setting.py中的CHECK_INTERVAL控制,默认 20 分钟一次。 - 不是简单存起来就完事,它会持续 ping 每个代理,验证是否真能用、是否支持 HTTPS、响应是否够快,坏的自动踢出,好的留下备用。验证逻辑在
tester/proxyTester.py中定义,可自定义超时阈值(TIMEOUT)和校验网址(TEST_URL),比如设成访问百度首页并检查 HTTP 状态码是否为 200。 - 提供一个本地API接口,你的爬虫代码只要调用
http://127.0.0.1:5010/get/就能拿到一个可用代理,一行代码接入,不用改架构。返回格式是标准 JSON:{"proxy": "112.85.12.33:8080", "https": true},字段含义一目了然。 - 支持一键删除已用过的代理,避免重复使用同一个IP触发风控;也能查总数、看全部列表,调试时一目了然。比如访问
/count返回{"count": 286},访问/all?type=https返回所有支持 HTTPS 的代理数组,方便你在日志里快速比对。 - 如果你有私有代理源(比如公司内网提供的HTTP代理池),可以自己写个短短十几行的Python脚本,把它接进ProxyPool,统一管理。只需继承
BaseFetcher类,重写fetch()方法,yield 出"host:port"字符串即可,无需改动主程序任何一行。 - 所有数据存在你本地的Redis里,不上传、不联网同步、不依赖任何第三方服务器,IP池是你自己的,规则也是你定的。数据库连接字符串写在
setting.py的DB_CONN字段中,支持 redis:// 协议全参数,包括密码、端口、DB 编号,甚至 Unix socket 路径。
价格直接砍到零。
数据全程不出你的电脑。
你随时可以关掉服务,删掉 Redis 数据库,整个过程不留痕、不绑定、不续费。
怎么开始用
- 去 GitHub releases 页面 下载最新版 zip 包(不用装 Git,也不用懂命令行),解压到任意文件夹。注意不要放在中文路径下,否则 Python 可能读取配置失败。
- 双击运行 install.bat(Windows)或 install.sh(Mac/Linux),它会自动装好 Python 依赖和 Redis(内置轻量版,无需单独安装)。脚本内部调用的是
pip install -r requirements.txt和预编译的 Redis for Windows / Homebrew 安装指令。 - 双击 start.bat 启动服务,等几秒看到 “server started on http://127.0.0.1:5010” 就好了,打开浏览器访问这个地址就能测试。此时后台实际启动了两个进程:一个是
python proxyPool.py schedule负责抓取和验证,另一个是python proxyPool.py server提供 API 接口。
如果想调整监听端口,改 setting.py 里的 PORT = 5010 即可;想换数据库地址,改 DB_CONN 字符串就行,比如连远程 Redis 就填 redis://:mypass@192.168.1.100:6379/1。


