scylla
自动化爬取验证 + Web UI + JSON API + HTTP 代理,一站式搞定高质量代理池
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
自动化爬取验证 + Web UI + JSON API + HTTP 代理,一站式搞定高质量代理池
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有遇到过这种情况:写好了一个爬虫,兴冲冲跑起来,结果 10 分钟后 IP 被封了,一切从头开始。在 AI 数据采集的世界里,高质量代理 IP 就是「弹药」,没有足够多、足够干净的代理,再好的爬虫也是无米之炊。
Scylla 就是为解决这个问题而生的:它是一个专为人类设计的智能代理池,能自动从全网爬取、验证和调度代理 IP,提供 Web UI、JSON API 和 HTTP 代理服务器三种使用方式,让数据采集工程师从繁琐的代理管理中解放出来。
项目名称 Scylla 来自美剧《越狱》中 T-Bag 团队为偷取芯片而虚构的化名——这是一个带有黑客浪漫色彩的名字,暗示着这个工具的定位:为数据猎手提供的精密武器。
Scylla 的工作链路可以概括为三个阶段:爬取(Fetch)→ 验证(Validate)→ 服务(Serve)。
图1:Scylla Web UI 代理列表界面,按国家、匿名性、HTTPS 支持等维度过滤
自动爬取:Scylla 内置了多个代理源爬虫(位于 scylla/providers/ 和 scylla/proxy/ 目录),通过调度器定期从免费代理网站抓取 IP 和端口。它还支持 Playwright 无头浏览器爬取,应对那些需要 JS 渲染才能加载的页面。
实时验证:获取到的代理并不会直接加入可用池,而是要通过 scylla/validator.py 和 scylla/tcpping.py 逐一验证——测试连通性、响应延迟、匿名度、是否支持 HTTPS 等指标。只有验证通过的代理才会被写入 SQLite 数据库(使用 Peewee ORM)。
多种消费方式:Scylla 提供了三种使用接口:
GET /api/v1/proxies 返回分页代理列表,支持按国家、匿名性、HTTPS 支持等参数过滤/ 路由提供可视化界面,可查看代理分布地图(基于地理位置数据)requests.get() 的 proxies 参数即可使用池中代理从代码结构来看,Scylla 是一个典型的前后端分离架构:
后端(scylla/ 目录):以 FastAPI + Uvicorn 作为 Web 框架,Tornado 提供额外支持。核心模块包括:
database.py:Peewee ORM 与 SQLite,配合 scheduler.py 管理爬取和验证任务调度worker.py + jobs.py:任务执行单元proxy_check_services.py + validator.py:代理质量验证逻辑cli.py:命令行入口前端(frontend/ 目录):React + TypeScript + Vite 构建系统,通过 Parcel 处理静态资源打包。前端通过 Ajax/Fetch 调用后端 JSON API 获取数据并渲染。
部署特性:项目提供完整的多阶段 Dockerfile,第一阶段编译前端资源,第二阶段仅保留 Ubuntu 运行时镜像,镜像体积可控。docker-compose.yml 只需一条命令即可启动完整服务(8899 API 端口 + 8081 代理端口)。
图2:Scylla Web UI 全球代理地理分布热力图,直观展示可用代理的地域覆盖
对于有 Docker 环境的用户,Scylla 的部署极简。pip 方式也只需两条命令,但需要注意 pycurl 等系统依赖的安装。源码编译方式涉及 Node.js + Python 混合构建,需要完整安装前端依赖并执行 make assets-build。
值得注意的是,初次启动后需要等待 1-2 分钟让爬虫填充初始代理池,第一批请求可能返回空结果。
Scylla 的定位是「个人/小团队工具」,而非企业级代理服务。它的局限性也比较明显:
docker-compose.yml 将 /var/www/scylla 目录挂载出来,如果不挂载重启后代理池清空在大模型时代,数据是燃料。Scylla 的出现反映了两个趋势:一是 代理需求的民主化——曾经需要付费代理服务商解决的问题,现在有了开源替代;二是 LLM 数据管道的专业化——项目描述中明确提到「为构建自己的 LLM」服务,说明数据采集工具正在与大模型训练流程深度绑定。
对于需要批量采集公开数据的开发者和研究团队,Scylla 是一个值得一试的起点。它的开源性质允许深度定制,结合自己的验证规则和爬取策略,可以构建出比肩商业方案的代理池系统。