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

如何利用 AnyCrawl 將網站內容轉換為適合 LLM 使用的 JSON

學習如何使用 Docker 自建 AnyCrawl,將 Atlas Cloud 設定為模型 API 來源,並將網頁內容提取為 AI 應用所需的 Markdown 與結構化 JSON。

如何利用 AnyCrawl 將網站內容轉換為適合 LLM 使用的 JSON

AnyCrawl 協助您將雜亂的網頁轉換為適合 LLM 應用的乾淨 Markdown 或 JSON。本教學將展示如何搭配 Atlas Cloud 作為模型 API 來源,從單一專案頁面擷取結構化欄位,並將此模式擴展至爬取與搜尋工作流程。

大多數網頁爬蟲教學只停留在「下載 HTML」。但對於 AI 應用程式來說,真正的挑戰才剛開始。原始頁面包含頁首、頁尾、側邊欄、Cookie 橫幅、重複連結以及 JavaScript 渲染的內容。您的模型真正需要的是穩定的資料介面:當需要內容上下文時提供乾淨的文字,當需要特定欄位時提供格式化的 JSON。

這正是 AnyCrawl 核心的開發理念。它是一個 Node.js / TypeScript 爬蟲與擷取工具,旨在將網站轉換為 LLM 就緒(LLM-ready)的資料,並支援單頁擷取、網站爬取、搜尋結果(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 的三項功能:

需求AnyCrawl 功能為何重要
擷取單一頁面/v1/scrape將單一 URL 轉為 Markdown 或 JSON 的最佳起點
擷取多個頁面/v1/crawl適用於文件網站、產品頁面、部落格與說明中心
優先搜尋頁面/v1/search在爬取 URL 之前需要先取得搜尋結果時使用
強制穩定欄位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 的請求主體 (request body)。

第 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 Schema。模型路由屬於 AnyCrawl 伺服器環境設定,因為 AnyCrawl 是執行 LLM 驅動擷取步驟的服務。

第 4 步:使用 Docker 啟動 AnyCrawl

注意: 在 macOS 上,啟動 AnyCrawl 前請確保 Docker Desktop 已安裝並執行中。對於 Apple Silicon Mac,除非您明確執行 amd64 映像檔,否則建議使用 autoplaywright 而非 puppeteer

執行 All-in-one 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 擷取,或兩者並用。本教學使用兩者並用,因為它同時提供了欄位控制與擷取指導。

第 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。此設定將爬蟲、提取模型與應用程式輸出保持在正確順序:先網頁,後結構化內容,最後才是應用程式整合。

常見問題 (FAQ)

AnyCrawl 的用途為何?

AnyCrawl 用於將網頁、網站與搜尋結果轉換為 Markdown 或結構化 JSON 等 LLM 就緒資料。它支援單頁爬取、全站爬取、SERP 收集以及基於 LLM 的 JSON 擷取,適用於 RAG 應用程式、AI 代理 (Agents)、研究工具與內部資料管線。

如何使用 AnyCrawl 從網頁擷取 JSON?

使用 /v1/scrape,在 formats 中加入 "json",並傳入包含提示詞、Schema 或兩者的 json_options。AnyCrawl 的 JSON 模式文件明確指出,若使用 json_options 但忘記在 formats 中包含 "json",回應將不會包含提取出的 JSON 資料。

如何將 Atlas Cloud 與 AnyCrawl 搭配使用?

應在 AnyCrawl 伺服器環境中將 Atlas Cloud 設定為 OpenAI 相容的模型提供者,而非在每次擷取請求中設定。Atlas Cloud 的文件說明其 LLM 端點為 OpenAI 相容,Base URL 為 https://api.atlascloud.ai/v1,而 AnyCrawl 的提供者設定使用環境變數(如 ATLASCLOUD_BASE_URLATLASCLOUD_API_KEY 與預設提取模型設定)。

AnyCrawl 可以爬取整個網站嗎?

可以。AnyCrawl 可透過 /v1/crawl 爬取網站,建立非同步爬取工作。Crawl API 允許您透過 max_depthlimitinclude_pathsexclude_paths 等選項控制範圍,並輪詢工作狀態以獲取分頁結果。

AnyCrawl 可以爬取 Google 搜尋結果嗎?

可以。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 模式、驗證輸出,最後再擴展到爬取 (crawl) 或搜尋 (search)。這樣可以避免將頁面存取問題、渲染問題與提取 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.

AnyCrawl 教學:將網站轉換為適用於 LLM 的 JSON