期間限定オファー|Seedance 2.0 & 2.0 Mini が 20% OFF!

AnyCrawlを使ってWebサイトをLLM対応のJSONに変換する方法

Dockerを使用してAnyCrawlをセルフホストする方法、Atlas CloudをモデルAPIソースとして設定する方法、そしてWebページをAIアプリ用のMarkdownや構造化JSONとして抽出する方法を学びましょう。

AnyCrawlを使ってWebサイトをLLM対応のJSONに変換する方法

AnyCrawl を使うと、乱雑なWebページをLLMアプリ向けのクリーンなMarkdownやJSONに変換できます。本チュートリアルでは、AnyCrawlとモデルAPIソースとしてのAtlas Cloudを連携させ、単一のプロジェクトページをスクレイピングして構造化フィールドを抽出する方法、そして同じパターンをクロールや検索ワークフローにスケールさせる方法を解説します。

ほとんどのWebスクレイピングチュートリアルは「HTMLのダウンロード」で終わってしまいますが、AIアプリにおいて真の作業はそこから始まります。生のページにはヘッダー、フッター、サイドバー、Cookieバナー、繰り返されるリンク、JavaScriptでレンダリングされたコンテンツが含まれています。モデルが真に必要としているのは、安定したデータインターフェースです。文脈が必要な場合はクリーンなテキスト、フィールドが必要な場合は型付きのJSONです。

これがAnyCrawlの有用なメンタルモデルです。AnyCrawlは、WebサイトをLLM対応データに変換するために構築されたNode.js/TypeScriptのクローラー兼スクレイパーであり、シングルページスクレイピング、サイトクロール、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の3つの機能を活用します。

   
用途AnyCrawl機能重要性
単一ページの抽出/v1/scrapeURLをMarkdownやJSONに変換する最適な出発点
複数ページの抽出/v1/crawlドキュメントサイト、製品ページ、ブログ、ヘルプセンターで有用
ページの事前検索/v1/searchURLをスクレイピングする前にSERP結果が必要な場合に有用
安定したフィールドの強制JSONモード下流のアプリが単なるテキストではなく、型付き出力を必要とする場合に有用

AnyCrawlのScrape APIは、URLをLLM対応の構造化データに変換し、Markdown、HTML、テキスト、スクリーンショット、raw HTML、JSON、要約、リンクを返せます。ドキュメントによると、Scrapeは同期処理のため、単一ページのためにポーリングループを組む必要はありません。

ステップバイステップ:AnyCrawlとAtlas CloudでWebページをJSONに抽出する

本チュートリアルでは、DockerでAnyCrawlをセルフホストし、抽出用のモデルAPIプロバイダーとしてAtlas Cloudを設定し、ローカルのAnyCrawlサーバーを呼び出してWebページを構造化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サーバー環境に属します。なぜなら、LLMによる抽出ステップを実行するのはAnyCrawlというサービスだからです。

ステップ4:DockerでAnyCrawlを起動

注意: macOSの場合、AnyCrawlを開始する前にDocker Desktopがインストールされ、起動していることを確認してください。Appleシリコン搭載のMacでは、明示的にamd64イメージを実行しない限り、puppeteerの代わりにautoまたはplaywrightを使用してください。

オールインワンの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抽出リクエストの作成

次に、構造化されたプロジェクトプロファイルを抽出するリクエストボディを作成します。

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モードは、プロンプトのみの抽出、スキーマのみの抽出、およびその両方をサポートしています。本チュートリアルでは、フィールドの制御と抽出ガイダンスの両方を得るために、プロンプトとスキーマの両方を使用しています。

ステップ7:JSON抽出の実行

ローカルのAnyCrawlサーバーにリクエストを送信します:

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

設定が正しければ、レスポンスにスクレイピング結果と、定義したスキーマに従った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コマンドを再度実行すれば、いつでも同じワークフローを再開できます。

構築したもののまとめ

これで、パブリックなWebページをスクレイピングし、Markdownにクリーンアップし、スキーマ駆動のLLMワークフローを通じて型付きJSONを抽出できるローカルのAnyCrawlサービスが整いました。このセットアップは、クローラー、抽出モデル、アプリケーション出力を適切な順序(Webページ → 構造化コンテンツ → アプリ統合)で保持します。

よくある質問

AnyCrawlは何に使われますか?

AnyCrawlは、Webページ、Webサイト、検索結果をMarkdownや構造化JSONといったLLM対応データに変換するために使用されます。シングルページスクレイピング、サイト全体クローリング、SERP収集、LLMによるJSON抽出をサポートしており、RAGアプリ、AIエージェント、リサーチツール、社内データパイプラインに役立ちます。

AnyCrawlを使ってWebページからJSONを抽出するには?

/v1/scrape を使用し、formats"json" を含め、json_options にプロンプトやスキーマ(あるいはその両方)を渡してください。ドキュメントにも記載がありますが、json_options を使用しても formats"json" を含め忘れると、抽出されたJSONデータは返されません。

AnyCrawlでAtlas Cloudを使うには?

すべてのスクレイピングリクエスト内で設定するのではなく、AnyCrawlのサーバー環境にて、OpenAI互換のLLMプロバイダーとしてAtlas Cloudを設定してください。Atlas Cloudのドキュメントにある通り、LLMエンドポイントはベースURL https://api.atlascloud.ai/v1 を持つOpenAI互換ですが、AnyCrawlのプロバイダー設定では ATLASCLOUD_BASE_URLATLASCLOUD_API_KEY、および抽出モデル設定用の環境変数を使用します。

AnyCrawlでWebサイト全体をクロールできますか?

はい、/v1/crawl を介して非同期のクロールジョブを作成できます。Crawl APIでは max_depthlimitinclude_pathsexclude_paths などのオプションで範囲を制御し、完了後にポーリングしてページネーションされた結果を取得可能です。

AnyCrawlはGoogleの検索結果をスクレイピングできますか?

はい、AnyCrawlには特定のURLをスクレイピングする前に構造化されたSERP結果を収集するためのSearch APIが含まれています。querypageslimitlangcountrytimeRange などのパラメータをサポートしており、既知のURLではなくリサーチクエリからAIワークフローを開始する場合に有用です。

AnyCrawlはFirecrawlやCrawl4AIより優れていますか?

一概には言えません。デプロイ環境やワークフローのニーズによります。本チュートリアルでは、ローカルDockerサービス、サーバーレベルのモデルプロバイダー設定、そしてシンプルな /v1/scrape からのJSONワークフローを求めているため、AnyCrawlが最適です。一方、FirecrawlやCrawl4AIにもそれぞれマネージド抽出やプログラマブルなクロールの強みがあります。

AnyCrawlではCheerio、Playwright、Puppeteerのどれを使うべきですか?

まずは auto または cheerio で開始し、ページにJavaScriptレンダリングが必要な場合に playwright に切り替えてください。AnyCrawlのスクレイピングドキュメントでは、静的HTMLには軽量なCheerio、複雑なページにはブラウザベースのPlaywright/Puppeteerが推奨されており、まずはMarkdownを確認し、必要に応じて重いエンジンに切り替えるのが実用的なフローです。

AnyCrawlのJSON出力が欠けているのはなぜですか?

最も多い原因は formats"json" が含まれていないことです。もう一つの原因は、選択したエンジンがページコンテンツを正しくキャプチャできていない場合です(特にJSレンダリングサイト)。その場合は autoplaywright で再試行し、スキーマをデバッグする前にMarkdownが正しく出ているか確認してください。

RAGデータパイプラインにAnyCrawlを使えますか?

はい、RAGデータ準備に最適です。WebページをMarkdownやスキーマ駆動のJSONに変換してからベクターデータベースやナレッジシステムに取り込めます。本番環境での優れたパターンは、まずスクレイピングして抽出フィールドを検証し、ソースURLを保存し、デバッグ用にMarkdownを十分に残しておくことです。

初心者にとって最も簡単なAnyCrawlワークフローは?

最も簡単なフローは、「1つのURLをスクレイピング → Markdownを要求 → コンテンツが正しいか確認 → JSONモードを追加 → 出力を検証 → クロールや検索にスケール」です。これにより、ページアクセス、レンダリング、抽出スキーマの問題を混同せず、デバッグしやすくなります。

最後に

AnyCrawlが有用なのは、Webページを単にダウンロードすべきHTMLドキュメントとしてではなく、AIシステムへの入力として扱うためです。まずは1ページから始め、Markdownを精査し、スキーマを追加し、JSONを検証してから、クロールや検索へとスケールしてください。

この順序を守ることでワークフローがシンプルに保たれます。また、WebデータがAIアプリの一部になる際、どこで失敗したのかを可視化できるようになります。

最新モデル

ひとつのAPIで、あらゆるメディアAIを。

すべてのモデルを探索

Join our Discord community

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

AnyCrawlチュートリアル:ウェブサイトをLLM向けJSONに変換する