# proxy_pool
**Repository Path**: Wuzk_97/proxy_pool
## Basic Information
- **Project Name**: proxy_pool
- **Description**: 一个从各类网站上抓取代理IP的私有代理池
- **Primary Language**: Python
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2026-04-28
- **Last Updated**: 2026-07-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ProxyPool 爬虫代理IP池
## 一、部署
### 方式一:Docker Compose 部署(推荐)
```bash
# 1. 安装 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
sudo systemctl start docker && sudo systemctl enable docker
# 2. 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 3. 克隆代码
git clone https://gitee.com/Wuzk_97/proxy_pool.git
cd proxy_pool
```
#### Docker Compose 配置文件修改
Docker Compose 使用 `docker-compose.yml` 配置文件,您可以根据需要修改以下内容:
**编辑 `docker-compose.yml`:**
```yaml
version: '3'
services:
proxy_redis:
image: redis:latest
container_name: proxy_redis
restart: always
volumes:
- redis_data:/data
# 如果需要设置 Redis 密码,取消下面这行的注释
# command: redis-server --requirepass your_redis_password
proxy_pool:
build: .
container_name: proxy_pool
restart: always
ports:
- "5010:5010"
volumes:
- ./config.yml:/app/config.yml
- ./log:/app/log
depends_on:
- proxy_redis
environment:
- TZ=Asia/Shanghai
volumes:
redis_data:
```
**编辑 `setting.py`,配置 Redis 连接:**
```python
# 数据库配置 - Docker Compose 中使用服务名 proxy_redis
DB_CONN = 'redis://@proxy_redis:6379/0'
# 如果设置了 Redis 密码,使用下面的格式:
# DB_CONN = 'redis://:your_redis_password@proxy_redis:6379/0'
# 服务配置
HOST = "0.0.0.0"
PORT = 5010
# 代理验证超时时间(秒)
VERIFY_TIMEOUT = 10
```
**启动服务:**
```bash
# 一键启动 Redis + ProxyPool
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 查看 proxy_pool 容器的日志
docker-compose logs -f proxy_pool
```
**注意:**
- Docker 容器已配置 `restart: always`,服务异常会自动重启
- `config.yml` 配置文件已挂载,修改后需重启容器:`docker-compose restart`
- 日志文件挂载到 `./log` 目录,方便查看
### 方式二:本地开发部署
```bash
# 1. 克隆代码
git clone https://gitee.com/Wuzk_97/proxy_pool.git
cd proxy_pool
# 2. 安装依赖
pip install -r requirements.txt
# 3. 启动 Redis(如果没有)
# Ubuntu/Debian: sudo apt install redis-server && sudo systemctl start redis
# Windows: 下载 Redis 并启动
# 4. 启动服务
python proxyPool.py schedule # 启动调度器(抓取代理)
python proxyPool.py server # 启动 API 服务
```
### 方式三:Linux 一键脚本
```bash
# Docker 方式
sudo bash deploy.sh
# 或 systemd 方式(不使用 Docker)
sudo bash deploy_systemd.sh
```
### 配置文件
编辑 `setting.py` 修改配置:
```python
# 数据库配置
DB_CONN = 'redis://:password@127.0.0.1:6379/0'
# 服务配置
HOST = "0.0.0.0"
PORT = 5010
# 代理验证超时时间
VERIFY_TIMEOUT = 10
```
---
## 二、使用
### API 接口
启动服务后,默认访问地址:`http://127.0.0.1:5010`
| 接口 | 方法 | 描述 | 参数 |
|------|------|------|------|
| `/` | GET | API 介绍 | None |
| `/get` | GET | 获取可用代理(自动验证) | `type=https` 过滤HTTPS代理
`check=false` 不验证
`exclude=IP` 排除指定IP |
| `/pop` | GET | 获取并删除一个代理 | `type=https` 过滤HTTPS代理 |
| `/all` | GET | 获取所有代理 | `type=https` 过滤HTTPS代理 |
| `/count` | GET | 查看代理数量 | None |
| `/delete` | GET | 删除指定代理 | `proxy=host:port` |
### API 文档
- 交互式文档:`http://127.0.0.1:5010/docs`
- ReDoc 文档:`http://127.0.0.1:5010/redoc`
### 爬虫使用示例
```python
import requests
def get_proxy():
return requests.get("http://127.0.0.1:5010/get/").json()
def delete_proxy(proxy):
requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))
def fetch_url(url):
retry_count = 5
proxy = get_proxy().get("proxy")
while retry_count > 0:
try:
response = requests.get(url, proxies={"http": f"http://{proxy}"}, timeout=10)
return response
except Exception:
retry_count -= 1
delete_proxy(proxy)
return None
```
### 更新代码
当远程仓库代码更新后,执行以下操作:
#### Linux 环境更新(推荐,处理配置冲突)
由于 Linux 服务器上的配置文件(`setting.py`、`config.yml`、`docker-compose.yml`)可能已修改,直接拉取可能会产生冲突。推荐使用以下流程:
**Docker Compose 方式:**
```bash
# 1. 进入项目目录
cd /opt/proxy_pool
# 2. 停止服务
docker-compose down
# 3. 备份配置文件
cp setting.py setting.py.bak
cp config.yml config.yml.bak
cp docker-compose.yml docker-compose.yml.bak
# 4. 还原所有代码到远程状态(丢弃本地修改)
git fetch origin
git reset --hard origin/master
# 5. 拉取最新代码(此时不会有冲突)
git pull origin master
# 6. 恢复配置文件
cp setting.py.bak setting.py
cp config.yml.bak config.yml
cp docker-compose.yml.bak docker-compose.yml
# 7. 清理备份文件(可选)
rm -f setting.py.bak config.yml.bak docker-compose.yml.bak
# 8. 重新构建并启动服务
docker-compose up -d --build
# 9. 查看日志确认启动成功
docker-compose logs -f
```
**systemd 方式:**
```bash
# 1. 进入项目目录
cd /opt/proxy_pool
# 2. 停止服务
sudo systemctl stop proxy_pool_server
sudo systemctl stop proxy_pool_schedule
# 3. 备份配置文件
cp setting.py setting.py.bak
cp config.yml config.yml.bak
# 4. 还原所有代码到远程状态
git fetch origin
git reset --hard origin/master
# 5. 拉取最新代码
git pull origin master
# 6. 恢复配置文件
cp setting.py.bak setting.py
cp config.yml.bak config.yml
# 7. 清理备份文件(可选)
rm -f setting.py.bak config.yml.bak
# 8. 安装新依赖(如有)
source venv/bin/activate
pip install -r requirements.txt
# 9. 重启服务
sudo systemctl start proxy_pool_schedule
sudo systemctl start proxy_pool_server
# 10. 检查服务状态
sudo systemctl status proxy_pool_server
sudo systemctl status proxy_pool_schedule
```
#### 普通更新(无冲突时使用)
如果确定本地没有修改配置文件,可以使用以下简化流程:
**Docker Compose 方式:**
```bash
cd /opt/proxy_pool/
git pull origin master
docker-compose up -d --build
```
**本地开发方式:**
```bash
cd /opt/proxy_pool/
git pull origin master
pip install -r requirements.txt
# 重启服务
python proxyPool.py schedule &
python proxyPool.py server &
```
**systemd 方式:**
```bash
cd /opt/proxy_pool
git pull origin master
source venv/bin/activate
pip install -r requirements.txt
sudo systemctl restart proxy_pool_server
sudo systemctl restart proxy_pool_schedule
```
### 常用命令
#### Docker 方式
```bash
# 查看容器状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 重启服务
docker-compose restart
# 停止服务
docker-compose down
# 进入容器
docker-compose exec proxy_pool bash
```
#### systemd 方式
```bash
# 查看状态
sudo systemctl status proxy_pool_server
sudo systemctl status proxy_pool_schedule
# 查看日志
sudo journalctl -u proxy_pool_server -f
sudo journalctl -u proxy_pool_schedule -f
# 重启服务
sudo systemctl restart proxy_pool_server
sudo systemctl restart proxy_pool_schedule
# 停止服务
sudo systemctl stop proxy_pool_server
sudo systemctl stop proxy_pool_schedule
```
#### Redis 操作
```bash
# 连接 Redis
redis-cli
# 查看代理数量
redis-cli SCARD use_proxy
# 清空代理池
redis-cli DEL use_proxy
# 查看所有代理
redis-cli SMEMBERS use_proxy
```
---
## 三、项目介绍
### 功能特点
- 定时采集网上发布的免费代理并验证入库
- 定时验证入库的代理保证代理的可用性
- 提供 API 和 CLI 两种使用方式
- 支持扩展代理源以增加代理池 IP 的质量和数量
- 支持 Python 3.12+,使用 FastAPI 提供 API 服务
### 代理源(共20个)
| 序号 | 名称 | 网站 |
|------|------|------|
| 1 | 站大爷 | zdaye.com |
| 2 | 代理66 | 66ip.cn |
| 3 | 开心代理 | kxdaili.com |
| 4 | FreeProxyList | freeproxylists.net |
| 5 | 快代理 | kuaidaili.com |
| 6 | 冰凌代理 | binglx.cn |
| 7 | 云代理 | ip3366.net |
| 8 | 小幻代理 | ihuan.me |
| 9 | 免费代理库 | jiangxianli.com |
| 10 | 89免费代理 | 89ip.cn |
| 11 | 稻壳代理 | docip.net |
| 12 | ProxyScrape | proxyscrape.com |
| 13 | Spys.one | spys.one |
| 14 | Geonode | proxylist.geonode.com |
| 15 | 代理星球 | xiladaili.com |
| 16 | 齐云代理 | 7yip.cn |
| 17 | IP海代理 | iphai.com |
| 18 | 全网代理 | goubanjia.com |
| 19 | 快代理API | kuaidaili.com |
| 20 | 89IP多页 | 89ip.cn |
### 代理源配置
编辑 `config.yml` 文件管理代理源:
```yaml
proxy_fetchers:
- name: "freeProxy01"
description: "站大爷"
enabled: true # 启用
- name: "freeProxy02"
description: "代理66"
enabled: false # 禁用
```
### 添加自定义代理源
1. 在 `fetcher/proxyFetcher.py` 中添加方法:
```python
@staticmethod
def myCustomProxy():
"""自定义代理源"""
url = "https://example.com/proxy"
tree = WebRequest().get(url).tree
for tr in tree.xpath("//table//tr"):
ip = tr.xpath("./td[1]/text()")[0]
port = tr.xpath("./td[2]/text()")[0]
yield f"{ip}:{port}"
```
2. 在 `config.yml` 中配置:
```yaml
proxy_fetchers:
- name: "myCustomProxy"
description: "自定义代理源"
enabled: true
```
### 数据持久化
**服务停止后,代理池里的代理不会消失**。
代理数据存储在 Redis 数据库中:
- Redis 默认启用持久化机制
- 数据会定期保存到磁盘
- 重启服务后可继续使用代理池
### 故障排查
```bash
# 检查端口占用
netstat -tlnp | grep 5010
# 检查 Redis 连接
redis-cli ping
# 查看服务日志
docker-compose logs -f
# 或
journalctl -u proxy_pool_server -f
```
### 联系支持
- Gitee Issues:https://gitee.com/Wuzk_97/proxy_pool/issues