AnyCrawl 能够帮你将杂乱的网页转换为清晰的 Markdown 或 JSON,以便用于 LLM 应用。本教程将向你展示如何将 AnyCrawl 与 Atlas Cloud 作为模型 API 源进行配对,抓取单个项目页面,提取结构化字段,并将相同的模式扩展到爬取和搜索工作流中。
大多数网页抓取教程止步于“下载 HTML”。但对于 AI 应用而言,真正的挑战才刚刚开始。原始网页包含页眉、页脚、侧边栏、Cookie 横幅、重复链接以及通过 JavaScript 渲染的内容。你的模型真正需要的是一个稳定的数据接口:当你需要上下文时提供纯净文本,当你需要字段时提供类型化的 JSON。
这正是 AnyCrawl 有用的思维模型。它是一个 Node.js / TypeScript 爬虫和抓取工具,旨在将网站转换为 LLM 就绪的数据。它支持单页抓取、站点爬取、SERP 采集、多线程/多进程负载以及由 LLM 驱动的 JSON 提取。
我们将构建什么
我们将构建一个小型“项目研究提取器”。
输入:
plaintext1一个公开的项目页面或文档 URL
输出:
plaintext1{ 2 "project_name": "AnyCrawl", 3 "one_sentence_summary": "...", 4 "core_features": ["..."], 5 "best_for": ["..."], 6 "input_types": ["url", "search query"], 7 "output_formats": ["markdown", "json"], 8 "evidence_urls": ["..."] 9}
本示例使用了三个 AnyCrawl 功能:
td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}
| 需求 | AnyCrawl 功能 | 重要性 |
| 提取单个页面 | /v1/scrape | 将一个 URL 转换为 Markdown 或 JSON 的最佳起点 |
| 提取多个页面 | /v1/crawl | 适用于文档站点、产品页面、博客和帮助中心 |
| 先查找页面 | /v1/search | 当你在抓取 URL 前需要 SERP 结果时很有用 |
| 强制稳定字段 | JSON 模式 | 当你的下游应用需要类型化输出而非仅文本时很有用 |
AnyCrawl 的 Scrape API 可将 URL 转换为 LLM 就绪的结构化数据,并可返回 Markdown、HTML、文本、截图、原始 HTML、JSON、摘要和链接。文档说明 Scrape 是同步的,因此你不需要为单页抓取编写轮询循环。
分步指南:使用 Atlas Cloud 运行 AnyCrawl 并将网页提取为 JSON
在本教程中,我们将使用 Docker 自托管 AnyCrawl,将 Atlas Cloud 设置为提取的模型 API 提供商,然后调用本地 AnyCrawl 服务器将网页转换为结构化 JSON。
注意: 本教程适用于 macOS 和 Linux 终端环境。
第 1 步:创建干净的项目文件夹
打开终端并为本次演示创建一个小文件夹。
plaintext1mkdir anycrawl-atlas-demo 2cd anycrawl-atlas-demo
该文件夹将仅包含环境变量文件和我们用于测试 API 的请求体。
第 2 步:获取 Atlas Cloud API 密钥
前往 Atlas Cloud 控制台,打开 API Keys 页面,点击 Create API Key,然后安全地复制并存储该密钥。Atlas Cloud 提示密钥仅显示一次,因此请在创建时将其保存在安全的地方。

请妥善保管密钥。切勿将其粘贴到公开的 GitHub 仓库、公开的文章草稿或截图中。
第 3 步:创建 .env 文件
在当前文件夹中创建一个 .env 文件:
plaintext1cat > .env <<'EOF' 2NODE_ENV=production 3ANYCRAWL_API_PORT=8080 4ANYCRAWL_HEADLESS=true 5ANYCRAWL_API_AUTH_ENABLED=false 6 7ATLASCLOUD_BASE_URL=https://api.atlascloud.ai/v1 8ATLASCLOUD_API_KEY=YOUR_ATLASCLOUD_API_KEY 9DEFAULT_LLM_MODEL=atlascloud/deepseek-v4 10DEFAULT_EXTRACT_MODEL=atlascloud/deepseek-v4 11EOF
将 YOUR_ATLASCLOUD_API_KEY 替换为你真实的密钥。
这是配置模型提供商的正确位置。抓取请求本身应保持对 URL、输出格式和 JSON 模式的关注。模型路由属于 AnyCrawl 服务器环境,因为 AnyCrawl 是执行 LLM 驱动提取步骤的服务。
第 4 步:使用 Docker 启动 AnyCrawl
注意: 在 macOS 上,请确保在启动 AnyCrawl 之前已安装并运行 Docker Desktop。对于 Apple Silicon Mac,除非你明确运行 amd64 镜像,否则请使用 auto 或 playwright 而不是 puppeteer。
运行多合一的 AnyCrawl 容器并将 .env 文件挂载到其中。
plaintext1docker run -d \ 2 --name anycrawl-atlas-demo \ 3 -p 8080:8080 \ 4 -v "$(pwd)/.env:/usr/src/app/.env:ro" \ 5 ghcr.io/any4ai/anycrawl:latest
检查服务是否正在运行:
plaintext1curl http://localhost:8080/health
Docker 文档使用端口 8080 进行本地部署,并显示 /health 作为验证端点。
第 5 步:先测试基础抓取请求
在请求 JSON 之前,先测试 AnyCrawl 是否能读取页面并返回 Markdown。
plaintext1curl -X POST "http://localhost:8080/v1/scrape" \ 2 -H "Content-Type: application/json" \ 3 -d '{ 4 "url": "https://github.com/any4ai/AnyCrawl", 5 "engine": "auto", 6 "formats": ["markdown"], 7 "only_main_content": true 8 }'
AnyCrawl 的 Scrape API 将 URL 转换为 LLM 就绪的结构化数据。它支持 auto、cheerio、playwright 和 puppeteer 等引擎,并支持包括 markdown、html、text、json、summary 和 links 在内的输出格式。
对于第一个请求,markdown 已足够。你在请求模型提取结构化字段之前,先检查页面内容是否可见。
第 6 步:创建 JSON 提取请求
现在创建一个请求体,要求 AnyCrawl 提取结构化的项目概况。
plaintext1cat > scrape-project.json <<'EOF' 2{ 3 "url": "https://github.com/any4ai/AnyCrawl", 4 "engine": "auto", 5 "formats": ["markdown", "json"], 6 "only_main_content": true, 7 "extract_source": "markdown", 8 "json_options": { 9 "schema_name": "open_source_project_profile", 10 "schema_description": "A structured profile of an open-source project based only on the visible page content.", 11 "schema": { 12 "type": "object", 13 "properties": { 14 "project_name": { 15 "type": "string" 16 }, 17 "one_sentence_summary": { 18 "type": "string" 19 }, 20 "core_features": { 21 "type": "array", 22 "items": { 23 "type": "string" 24 } 25 }, 26 "best_for": { 27 "type": "array", 28 "items": { 29 "type": "string" 30 } 31 }, 32 "supported_tasks": { 33 "type": "array", 34 "items": { 35 "type": "string" 36 } 37 }, 38 "developer_setup_notes": { 39 "type": "array", 40 "items": { 41 "type": "string" 42 } 43 } 44 }, 45 "required": [ 46 "project_name", 47 "one_sentence_summary", 48 "core_features" 49 ] 50 }, 51 "user_prompt": "Extract only facts that are visible on the page. Do not guess. Summarize the project for a developer who wants to use web data in an AI application." 52 } 53} 54EOF
这里有一个容易犯的错误:使用 json_options 时,你必须在 formats 中包含 "json";否则响应将不包含提取的 JSON 数据。AnyCrawl 的 JSON 模式支持仅 Prompt 提取、仅 Schema 提取以及 Prompt 加 Schema 提取。在本教程中,我们使用 Prompt 加 Schema,因为它既提供了字段控制,也提供了提取指导。
第 7 步:运行 JSON 提取
将请求发送到本地 AnyCrawl 服务器:
plaintext1curl -X POST "http://localhost:8080/v1/scrape" \ 2 -H "Content-Type: application/json" \ 3 -d @scrape-project.json
如果配置正确,响应应包含成功的抓取结果以及遵循你所定义 Schema 的 JSON 提取结果。
至此,整个流程已完成:
plaintext1GitHub 项目页面 2→ 本地 AnyCrawl 抓取 API 3→ Markdown 提取 4→ LLM 驱动的 JSON 提取 5→ 结构化项目概况
重点在于,请求从不直接调用模型提供商。AnyCrawl 处理抓取和提取工作流,而模型 API 源已在服务器层面预先配置。
第 8 步:如果 Markdown 为空,请尝试 JavaScript 密集型页面
如果 Markdown 结果过短、为空或丢失了可见的页面内容,请将引擎切换为 playwright。
plaintext1{ 2 "url": "https://example.com", 3 "engine": "playwright", 4 "formats": ["markdown", "json"], 5 "only_main_content": true, 6 "json_options": { 7 "user_prompt": "Extract the main topic, key facts, and important links from this page." 8 } 9}
AnyCrawl 文档将 cheerio 描述为适用于静态 HTML 的高速引擎,playwright 适用于 JavaScript 渲染的页面,而 auto 是可以自动选择引擎的通用选项。
第 9 步:停止并清理演示容器
完成测试后,停止容器:
plaintext1docker stop anycrawl-atlas-demo 2docker rm anycrawl-atlas-demo
你以后可以通过在包含 .env 文件的文件夹中再次运行 Docker 命令来重启相同的工作流。
你刚才构建了什么
你现在拥有了一个本地 AnyCrawl 服务,它可以抓取公开网页,将其清洗为 Markdown,并通过 Schema 引导的 LLM 工作流提取类型化 JSON。该设置将爬虫、提取模型和应用程序输出按正确的顺序组织起来:网页优先,结构化内容次之,最后是应用集成。
常见问题解答
AnyCrawl 的用途是什么?
AnyCrawl 用于将网页、网站和搜索结果转换为 Markdown 和结构化 JSON 等 LLM 就绪的数据。它支持单页抓取、全站爬取、SERP 采集以及 LLM 驱动的 JSON 提取,因此非常适合 RAG 应用、AI 智能体、研究工具和内部数据流水线。
如何使用 AnyCrawl 从网页提取 JSON?
使用 /v1/scrape,在 formats 中包含 "json",并传入包含 Prompt、Schema 或两者兼有的 json_options。AnyCrawl 的 JSON 模式文档特别指出,如果使用了 json_options 但忘记在 formats 中包含 "json",响应将不会包含提取的 JSON 数据。
如何将 Atlas Cloud 与 AnyCrawl 一起使用?
将 Atlas Cloud 作为 AnyCrawl 服务器环境中的 OpenAI 兼容 LLM 提供商,而不是在每个抓取请求中进行配置。Atlas Cloud 文档将其 LLM 端点描述为 OpenAI 兼容,基准 URL 为 https://api.atlascloud.ai/v1,而 AnyCrawl 的提供商设置使用环境变量,如 ATLASCLOUD_BASE_URL、ATLASCLOUD_API_KEY 和默认提取模型设置。
AnyCrawl 可以爬取整个网站吗?
可以,AnyCrawl 可以通过 /v1/crawl 爬取网站,该接口会创建一个异步爬取作业。Crawl API 允许你通过 max_depth、limit、include_paths 和 exclude_paths 等选项控制范围,然后轮询爬取作业并获取分页结果。
AnyCrawl 可以抓取谷歌搜索结果吗?
可以,AnyCrawl 包含一个 Search API,用于在抓取选定 URL 之前收集结构化的 SERP 结果。其 Search API 支持 query、pages、limit、lang、country 和 timeRange 等参数,这在你的 AI 工作流从研究查询而不是已知 URL 开始时非常有用。
AnyCrawl 比 Firecrawl 或 Crawl4AI 更好吗?
这取决于你的部署和工作流需求,没有绝对的好坏。AnyCrawl 非常适合本教程,因为我们需要本地 Docker 服务、服务器层面的模型提供商配置以及简单的 /v1/scrape 转 JSON 工作流,而 Firecrawl 和 Crawl4AI 分别在托管提取和可编程爬取方面各有优势。
我在 AnyCrawl 中应该使用 Cheerio、Playwright 还是 Puppeteer?
先从 auto 或 cheerio 开始,当页面需要 JavaScript 渲染时切换到 playwright。AnyCrawl 的抓取文档将 Cheerio 定义为静态 HTML 的轻量级选择,将 Playwright/Puppeteer 定义为处理复杂页面的浏览器引擎,因此实际工作流是先检查 Markdown,仅在需要时才使用更强大的引擎。
为什么我的 AnyCrawl JSON 输出缺失?
最常见的原因是在 formats 中未包含 "json"。另一个常见原因是所选引擎未正确捕获页面内容,尤其是在 JavaScript 渲染的网站上;在这种情况下,请重试 auto 或 playwright,并在调试 Schema 之前先检查 Markdown。
我可以将 AnyCrawl 用于 RAG 数据流水线吗?
可以,AnyCrawl 非常适合 RAG 数据准备,因为它可以在内容进入向量数据库或知识系统之前,将网页转换为 Markdown 和 Schema 引导的 JSON。一个好的生产环境模式是:先抓取,验证提取出的字段,存储源 URL,并保留足够的 Markdown 用于调试。
对于初学者,最简单的 AnyCrawl 工作流是什么?
最简单的工作流是:抓取一个 URL,请求 Markdown,确认内容正确,添加 JSON 模式,验证输出,然后再转向爬取或搜索。这可以避免将页面访问问题、渲染问题和提取 Schema 问题混合在一个难以调试的请求中。
最终总结
AnyCrawl 之所以有用,是因为它将网页视为 AI 系统的输入,而不仅仅是供下载的 HTML 文档。先从单页开始,检查 Markdown,添加 Schema,验证 JSON,然后再进行扩展爬取或搜索。
这样的顺序使工作流保持简单,并能清晰地发现失败点——这正是当网页数据成为 AI 应用一部分时你所需要的。







