uzzalhcse/crawlstack
GitHub: uzzalhcse/crawlstack
自托管的通用网页抓取 API,支持 JS 渲染、验证码破解、指纹伪装与代理路由,一次 GET 请求即可返回干净的 HTML、Markdown 或截图。
Stars: 0 | Forks: 0
# CrawlStack
自托管的通用网页抓取 API。只需一次 `GET /v1/` 请求即可从任何网站提取数据 —— 返回干净的 HTML、Markdown 或截图。
## 功能特性
- **HTTP Fast Path** —— 无需启动浏览器,通过 TLS 伪装请求
- **Browser Engine** —— 针对重度 JS 和受保护网站使用真正的 Chrome
- **Stealth+** —— 指纹伪装与虚拟显示绕过
- **JS Instructions** —— 通过 JSON 指令实现点击、填充、滚动、等待
- **Session Persistence** —— 跨请求复用浏览器会话
- **Proxy Routing** —— 内置高级代理支持
- **CAPTCHA Solving** —— 通过 `solve_captcha=true` 自动解决
- **Multiple Output Formats** —— 支持 HTML、Markdown 或截图
## 快速开始
```
# 1. 启动所有服务
docker compose up -d
# 2. 初始化数据库 (仅首次)
docker compose exec backend ./app seed
# 3. 打开仪表盘 http://localhost:3232
# 默认凭据: admin@crawlstack.com / password
#4. Download/Install the latest Browser from /browser page
```
## API 用法
```
GET /v1/?apikey=&url=
```
### 参数
| Parameter | Description |
|---||
| `apikey` | 你的 API 密钥 (必填) |
| `url` | 要抓取的目标 URL (必填) |
| `js_render` | 启用无头 Chrome 渲染 (`true`/`false`) |
| `output_format` | `html` (默认), `markdown`, 或 `screenshot` |
| `wait_for` | 返回前等待的 CSS 选择器 |
| `wait_time` | 选择器匹配后的额外等待时间 (毫秒) |
| `js_instructions` | 浏览器动作的 JSON 数组 (click, fill, wait, evaluate) |
| `session_id` | 跨请求复用浏览器会话 |
| `premium_proxy` | 通过高级代理路由 (`true`/`false`) |
| `solve_captcha` | 自动解决 CAPTCHA (`true`/`false`) |
| `target_os` | 模拟设备指纹 (`windows`, `android` 等) |
### 示例
```
# 基础抓取
curl "http://localhost:8082/v1/?apikey=&url=https%3A%2F%2Fexample.com"
# JS rendering 与等待
curl "http://localhost:8082/v1/?apikey=&url=https%3A%2F%2Fexample.com&js_render=true&wait_for=.content"
```
## 架构
| Service | Image |
|---|---|
| **backend** | `ghcr.io/camoium/crawlstack/backend` |
| **scraper** | `ghcr.io/camoium/crawlstack/scraper` |
| **frontend** | `ghcr.io/camoium/crawlstack/frontend` |
| **postgres** | `postgres:16-alpine` |
| **redis** | `redis:7-alpine` |
## 环境变量
```
DB_USER=postgres
DB_PASSWORD=your-secure-password
DB_NAME=crawlstack
JWT_SECRET=your-random-secret-key
JWT_EXPIRY=72h
FRONTEND_URL=http://localhost:3232
REDIS_PASSWORD=
TZ=America/New_York
WORKER_COUNT=4
WARM_POOL_SIZE=2
BROWSER_TIMEOUT=120s
```
标签:DNS 解析, HTML转Markdown, JavaScript渲染, TLS指纹伪造, Web抓取, 代理路由, 会话持久化, 反检测, 搜索引擎查询, 数据采集工具, 无头浏览器, 测试用例, 浏览器指纹伪装, 网络爬虫框架, 网页截图, 自动化数据提取, 请求拦截, 足迹分析, 验证码破解