AnyCrawl 協助您將雜亂的網頁轉換為適合 LLM 應用的乾淨 Markdown 或 JSON。本教學將展示如何搭配 Atlas Cloud 作為模型 API 來源,從單一專案頁面擷取結構化欄位,並將此模式擴展至爬取與搜尋工作流程。
大多數網頁爬蟲教學只停留在「下載 HTML」。但對於 AI 應用程式來說,真正的挑戰才剛開始。原始頁面包含頁首、頁尾、側邊欄、Cookie 橫幅、重複連結以及 JavaScript 渲染的內容。您的模型真正需要的是穩定的資料介面:當需要內容上下文時提供乾淨的文字,當需要特定欄位時提供格式化的 JSON。
這正是 AnyCrawl 核心的開發理念。它是一個 Node.js / TypeScript 爬蟲與擷取工具,旨在將網站轉換為 LLM 就緒(LLM-ready)的資料,並支援單頁擷取、網站爬取、搜尋結果(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 的三項功能:
| 需求 | 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 步:建立乾淨的專案資料夾
開啟終端機並為此演示建立一個資料夾。
plaintext1mkdir anycrawl-atlas-demo 2cd anycrawl-atlas-demo
此資料夾僅存放環境設定檔以及我們用來測試 API 的請求主體 (request body)。
第 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 Schema。模型路由屬於 AnyCrawl 伺服器環境設定,因為 AnyCrawl 是執行 LLM 驅動擷取步驟的服務。
第 4 步:使用 Docker 啟動 AnyCrawl
注意: 在 macOS 上,啟動 AnyCrawl 前請確保 Docker Desktop 已安裝並執行中。對於 Apple Silicon Mac,除非您明確執行 amd64 映像檔,否則建議使用 auto 或 playwright 而非 puppeteer。
執行 All-in-one 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 擷取,或兩者並用。本教學使用兩者並用,因為它同時提供了欄位控制與擷取指導。
第 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。此設定將爬蟲、提取模型與應用程式輸出保持在正確順序:先網頁,後結構化內容,最後才是應用程式整合。
常見問題 (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_URL、ATLASCLOUD_API_KEY 與預設提取模型設定)。
AnyCrawl 可以爬取整個網站嗎?
可以。AnyCrawl 可透過 /v1/crawl 爬取網站,建立非同步爬取工作。Crawl API 允許您透過 max_depth、limit、include_paths 與 exclude_paths 等選項控制範圍,並輪詢工作狀態以獲取分頁結果。
AnyCrawl 可以爬取 Google 搜尋結果嗎?
可以。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 模式、驗證輸出,最後再擴展到爬取 (crawl) 或搜尋 (search)。這樣可以避免將頁面存取問題、渲染問題與提取 Schema 問題混在一起,導致難以除錯。
總結
AnyCrawl 的價值在於它將網頁視為 AI 系統的輸入來源,而不僅僅是供下載的 HTML 文件。從一個頁面開始,檢查 Markdown,加入 Schema,驗證 JSON,最後再進行爬取或搜尋的規模化。
這種順序能保持工作流程的簡潔,並讓故障點易於發現,這正是當網路資料成為 AI 應用一部分時所需要的。







