Seedance 2.5 现已上线 — 首发 Atlas Cloud

如何使用 AnyCrawl 将网站转换为适用于大模型的 JSON

了解如何使用 Docker 自托管 AnyCrawl,将 Atlas Cloud 配置为模型 API 源,并将网页提取为适合 AI 应用的 Markdown 和结构化 JSON。

如何使用 AnyCrawl 将网站转换为适用于大模型的 JSON

AnyCrawl 能够帮你将杂乱的网页转换为清晰的 Markdown 或 JSON,以便用于 LLM 应用。本教程将向你展示如何将 AnyCrawl 与 Atlas Cloud 作为模型 API 源进行配对,抓取单个项目页面,提取结构化字段,并将相同的模式扩展到爬取和搜索工作流中。

大多数网页抓取教程止步于“下载 HTML”。但对于 AI 应用而言,真正的挑战才刚刚开始。原始网页包含页眉、页脚、侧边栏、Cookie 横幅、重复链接以及通过 JavaScript 渲染的内容。你的模型真正需要的是一个稳定的数据接口:当你需要上下文时提供纯净文本,当你需要字段时提供类型化的 JSON。

这正是 AnyCrawl 有用的思维模型。它是一个 Node.js / TypeScript 爬虫和抓取工具,旨在将网站转换为 LLM 就绪的数据。它支持单页抓取、站点爬取、SERP 采集、多线程/多进程负载以及由 LLM 驱动的 JSON 提取。

我们将构建什么

我们将构建一个小型“项目研究提取器”。

输入:

plaintext
1一个公开的项目页面或文档 URL

输出:

plaintext
1{
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 步:创建干净的项目文件夹

打开终端并为本次演示创建一个小文件夹。

plaintext
1mkdir anycrawl-atlas-demo
2cd anycrawl-atlas-demo

该文件夹将仅包含环境变量文件和我们用于测试 API 的请求体。

第 2 步:获取 Atlas Cloud API 密钥

前往 Atlas Cloud 控制台,打开 API Keys 页面,点击 Create API Key,然后安全地复制并存储该密钥。Atlas Cloud 提示密钥仅显示一次,因此请在创建时将其保存在安全的地方。

Atlas Cloud

请妥善保管密钥。切勿将其粘贴到公开的 GitHub 仓库、公开的文章草稿或截图中。

第 3 步:创建 .env 文件

在当前文件夹中创建一个 .env 文件:

plaintext
1cat > .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 镜像,否则请使用 autoplaywright 而不是 puppeteer

运行多合一的 AnyCrawl 容器并将 .env 文件挂载到其中。

plaintext
1docker 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

检查服务是否正在运行:

plaintext
1curl http://localhost:8080/health

Docker 文档使用端口 8080 进行本地部署,并显示 /health 作为验证端点。

第 5 步:先测试基础抓取请求

在请求 JSON 之前,先测试 AnyCrawl 是否能读取页面并返回 Markdown。

plaintext
1curl -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 就绪的结构化数据。它支持 autocheerioplaywrightpuppeteer 等引擎,并支持包括 markdownhtmltextjsonsummarylinks 在内的输出格式。

对于第一个请求,markdown 已足够。你在请求模型提取结构化字段之前,先检查页面内容是否可见。

第 6 步:创建 JSON 提取请求

现在创建一个请求体,要求 AnyCrawl 提取结构化的项目概况。

plaintext
1cat > 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 服务器:

plaintext
1curl -X POST "http://localhost:8080/v1/scrape" \
2  -H "Content-Type: application/json" \
3  -d @scrape-project.json

如果配置正确,响应应包含成功的抓取结果以及遵循你所定义 Schema 的 JSON 提取结果。

至此,整个流程已完成:

plaintext
1GitHub 项目页面
2→ 本地 AnyCrawl 抓取 API
3→ Markdown 提取
4→ LLM 驱动的 JSON 提取
5→ 结构化项目概况

重点在于,请求从不直接调用模型提供商。AnyCrawl 处理抓取和提取工作流,而模型 API 源已在服务器层面预先配置。

第 8 步:如果 Markdown 为空,请尝试 JavaScript 密集型页面

如果 Markdown 结果过短、为空或丢失了可见的页面内容,请将引擎切换为 playwright

plaintext
1{
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 步:停止并清理演示容器

完成测试后,停止容器:

plaintext
1docker 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_URLATLASCLOUD_API_KEY 和默认提取模型设置。

AnyCrawl 可以爬取整个网站吗?

可以,AnyCrawl 可以通过 /v1/crawl 爬取网站,该接口会创建一个异步爬取作业。Crawl API 允许你通过 max_depthlimitinclude_pathsexclude_paths 等选项控制范围,然后轮询爬取作业并获取分页结果。

AnyCrawl 可以抓取谷歌搜索结果吗?

可以,AnyCrawl 包含一个 Search API,用于在抓取选定 URL 之前收集结构化的 SERP 结果。其 Search API 支持 querypageslimitlangcountrytimeRange 等参数,这在你的 AI 工作流从研究查询而不是已知 URL 开始时非常有用。

AnyCrawl 比 Firecrawl 或 Crawl4AI 更好吗?

这取决于你的部署和工作流需求,没有绝对的好坏。AnyCrawl 非常适合本教程,因为我们需要本地 Docker 服务、服务器层面的模型提供商配置以及简单的 /v1/scrape 转 JSON 工作流,而 Firecrawl 和 Crawl4AI 分别在托管提取和可编程爬取方面各有优势。

我在 AnyCrawl 中应该使用 Cheerio、Playwright 还是 Puppeteer?

先从 autocheerio 开始,当页面需要 JavaScript 渲染时切换到 playwright。AnyCrawl 的抓取文档将 Cheerio 定义为静态 HTML 的轻量级选择,将 Playwright/Puppeteer 定义为处理复杂页面的浏览器引擎,因此实际工作流是先检查 Markdown,仅在需要时才使用更强大的引擎。

为什么我的 AnyCrawl JSON 输出缺失?

最常见的原因是在 formats 中未包含 "json"。另一个常见原因是所选引擎未正确捕获页面内容,尤其是在 JavaScript 渲染的网站上;在这种情况下,请重试 autoplaywright,并在调试 Schema 之前先检查 Markdown。

我可以将 AnyCrawl 用于 RAG 数据流水线吗?

可以,AnyCrawl 非常适合 RAG 数据准备,因为它可以在内容进入向量数据库或知识系统之前,将网页转换为 Markdown 和 Schema 引导的 JSON。一个好的生产环境模式是:先抓取,验证提取出的字段,存储源 URL,并保留足够的 Markdown 用于调试。

对于初学者,最简单的 AnyCrawl 工作流是什么?

最简单的工作流是:抓取一个 URL,请求 Markdown,确认内容正确,添加 JSON 模式,验证输出,然后再转向爬取或搜索。这可以避免将页面访问问题、渲染问题和提取 Schema 问题混合在一个难以调试的请求中。

最终总结

AnyCrawl 之所以有用,是因为它将网页视为 AI 系统的输入,而不仅仅是供下载的 HTML 文档。先从单页开始,检查 Markdown,添加 Schema,验证 JSON,然后再进行扩展爬取或搜索。

这样的顺序使工作流保持简单,并能清晰地发现失败点——这正是当网页数据成为 AI 应用一部分时你所需要的。

最新模型

一个 API,畅享全模态 AI。

探索全部模型