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抓取, 代理路由, 会话持久化, 反检测, 搜索引擎查询, 数据采集工具, 无头浏览器, 测试用例, 浏览器指纹伪装, 网络爬虫框架, 网页截图, 自动化数据提取, 请求拦截, 足迹分析, 验证码破解