# 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