限时特惠|Seedance 2.0 & 2.0 Mini 立享 8 折!

如何使用 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。

探索全部模型

Join our Discord community

Join the Discord community for the latest model updates, prompts, and support.