Webページの情報をLLMに渡したいのに、HTMLのノイズ除去や構造化に手間がかかる――。RAGやAIエージェント開発で、多くのエンジニアが直面する課題です。Crawl4AIは、この問題を根本から解決するために生まれたオープンソースのWebクローラーです。
Crawl4AIの概要
Crawl4AIは、Webページをクロールし、LLMが扱いやすいクリーンなMarkdown形式に変換するPython製のオープンソースツールです。開発者のunclecode氏がGitHubで公開しており、Apache-2.0ライセンス(帰属表示条項付き)のもと完全無料で利用できます。商用利用も可能ですが、公開利用・配布時にはCrawl4AIへの帰属表示(バッジ掲載等)が必要です。
GitHub上では約59,600以上のStarを獲得し、LLM向けWebクローラーとして急速にコミュニティが拡大しています。
| 項目 | 内容 |
|---|---|
| 開発者 | unclecode |
| リポジトリ | github.com/unclecode/crawl4ai |
| ライセンス | Apache-2.0(帰属表示条項付き) |
| 言語 | Python(3.10以上) |
| 最新バージョン | v0.8.0(2026年1月リリース) |
| GitHub Stars | 約59,600+ |
従来のスクレイピングとの根本的な違い
BeautifulSoupやScrapyといった従来のスクレイピングツールは、HTMLからデータを取り出すことに特化しています。一方、Crawl4AIはデータ取得後の「LLMへの受け渡し」を前提に設計されている点が最大の特徴です。
具体的には、以下の3つの設計思想が従来ツールと異なります。
Markdown変換が標準装備
取得したWebページをBM25アルゴリズムベースで不要なナビゲーションや広告を除去し、クリーンなMarkdownへ自動変換します。従来ツールでは、この前処理を開発者が自前で実装する必要がありました。
LLM抽出ストラテジーの内蔵
LLMを呼び出してWebページから構造化データを抽出する機能が組み込まれています。OpenAI、Anthropic、Ollama(ローカルLLM)など、任意のLLMプロバイダーと連携できます。
非同期処理とブラウザ制御の統合
Playwrightを内蔵し、JavaScriptで動的にレンダリングされるSPA(Single Page Application)やインフィニットスクロールにも対応します。asyncioベースの非同期処理により、複数ページの同時クロールも効率的に実行できます。
主要機能の詳細
Crawl4AIが備える機能を用途別に整理します。
データ抽出の3つのアプローチ
Crawl4AIでは、用途に応じて異なる抽出方式を選択できます。
| 抽出方式 | LLM利用 | 適した用途 | コスト |
|---|---|---|---|
| CSS/XPathセレクタ | 不要 | 構造が決まったページの定型抽出 | 無料 |
| JsonCssExtractionStrategy | 不要 | JSON形式での構造化抽出 | 無料 |
| LLMExtractionStrategy | 必要 | 非定型ページからの柔軟な抽出 | LLM API費用 |
LLMを使わない方式なら、APIコストを一切かけずに構造化データを取得できます。コストを抑えたい場面ではCSS/XPathセレクタやJsonCssExtractionStrategyが有効です。
Deep Crawl(深層クロール)
v0.8.0で強化されたDeep Crawl機能は、単一ページではなくサイト全体を再帰的にクロールする仕組みです。
- クラッシュリカバリ: 長時間のクロール中にプロセスが中断しても、
resume_stateで途中から再開可能 - Prefetchモード: URLの事前検出により、通常の5〜10倍高速にサイト全体を巡回
- on_state_changeコールバック: クロール状態の変化をリアルタイムで監視
セッション管理とプロキシ対応
ログインが必要なサイトでも、セッション管理機能でCookieやトークンを保持したままクロールが可能です。プロキシサーバーの設定にも対応しており、IPローテーションを組み合わせた大規模収集にも適しています。
スクリーンショット・PDF生成
クロール時にページのスクリーンショットやPDFを取得する機能も搭載しています。視覚的な記録が必要なケースや、マルチモーダルLLMへの入力として活用できます。
インストールと環境構築
pipによるインストール
pip install crawl4ai
crawl4ai-setup
Python 3.10以上の環境で pip install crawl4ai を実行するとコアパッケージがインストールされます。その後 crawl4ai-setup を実行すると、Playwrightのブラウザ依存関係が自動的にセットアップされます。
インストール後は crawl4ai-doctor コマンドでシステム互換性を検証できます。
用途に応じたオプションインストールも用意されています。
# PyTorch連携が必要な場合
pip install crawl4ai[torch]
# Transformers連携が必要な場合
pip install crawl4ai[transformer]
# 全機能インストール
pip install crawl4ai[all]
[torch] や [transformer] は大規模モデルを含むため、ディスクとメモリの使用量が大幅に増加します。必要な機能だけを選んでインストールするのが推奨です。
Dockerでの利用
docker pull unclecode/crawl4ai:basic
docker run -p 11235:11235 unclecode/crawl4ai:basic
ポート11235でFastAPIサーバーが起動し、REST API経由でクロール機能を利用できます。チーム開発やCI/CDパイプラインへの組み込みに適しています。
基本的な使い方:コード例で理解する
最小構成:URLからMarkdownを取得
import asyncio
from crawl4ai import AsyncWebCrawler
async def main():
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(url="https://example.com")
print(result.markdown)
asyncio.run(main())
AsyncWebCrawler のコンテキストマネージャー内で arun() を呼び出すだけで、対象URLのMarkdown変換結果を取得できます。わずか数行のコードでWebページがLLM向けテキストに変換されます。
LLMを使った構造化データ抽出
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig
from crawl4ai.extraction_strategy import LLMExtractionStrategy
from pydantic import BaseModel
class Article(BaseModel):
title: str
summary: str
published_date: str
async def main():
strategy = LLMExtractionStrategy(
provider="openai/gpt-4o-mini",
schema=Article.model_json_schema(),
instruction="記事のタイトル、要約、公開日を抽出してください"
)
config = CrawlerRunConfig(extraction_strategy=strategy)
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(
url="https://example.com/article",
config=config
)
print(result.extracted_content)
asyncio.run(main())
PydanticモデルでスキーマをLLMに渡すと、Webページから指定した構造のJSONが返ります。プロバイダーは openai/gpt-4o-mini、anthropic/claude-sonnet-4-5-20250929、ollama/llama3 など自由に切り替えられます。
LLMなしでの構造化抽出(JsonCssExtractionStrategy)
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig
from crawl4ai.extraction_strategy import JsonCssExtractionStrategy
async def main():
schema = {
"name": "商品一覧",
"baseSelector": "div.product-card",
"fields": [
{"name": "title", "selector": "h2.product-title", "type": "text"},
{"name": "price", "selector": "span.price", "type": "text"},
{"name": "url", "selector": "a", "type": "attribute", "attribute": "href"}
]
}
strategy = JsonCssExtractionStrategy(schema)
config = CrawlerRunConfig(extraction_strategy=strategy)
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(
url="https://example.com/products",
config=config
)
print(result.extracted_content)
asyncio.run(main())
CSSセレクタでフィールドを指定するため、LLM APIの呼び出しコストがゼロです。ECサイトの商品情報や求人サイトの掲載一覧など、構造が安定したページに最適です。
RAGパイプラインへの統合
Crawl4AIの出力はMarkdown形式のため、RAG(Retrieval-Augmented Generation)パイプラインとの親和性が高い設計です。
典型的な統合フローは以下のとおりです。
Webページ → Crawl4AI(Markdown変換) → チャンク分割 → Embedding生成 → ベクトルDB格納 → LLMによる回答生成
Crawl4AI自体にもチャンク分割(Chunking Strategy)の仕組みが用意されています。トピックベースやRegexベースで分割方式を選択でき、外部のテキストスプリッターを使わずにRAG向けのデータ前処理が完結します。
MCP(Model Context Protocol)との連携
Crawl4AIはMCPサーバーとしても利用できます。MCPはAnthropicが策定したプロトコルで、AIツール(Claude Desktop、Claude Code、Cursorなど)から外部ツールを呼び出すための標準規格です。
Crawl4AI MCPサーバーを導入すると、Claude CodeやCursorから直接「このURLをクロールしてMarkdownにして」といった指示でWebデータを取得できるようになります。コミュニティ製のMCPサーバー実装が複数公開されており、RAG用のベクトルDB連携まで一体化したものもあります。
Crawl4AIと競合ツールの比較
Crawl4AIの位置づけを明確にするため、代表的なスクレイピングツールと比較します。
| 比較項目 | Crawl4AI | Firecrawl | Scrapy | BeautifulSoup |
|---|---|---|---|---|
| ライセンス | Apache-2.0 | AGPL-3.0 | BSD-3-Clause | MIT |
| 料金 | 完全無料 | 無料500クレジット、有料$16〜$333/月 | 完全無料 | 完全無料 |
| LLM連携 | 内蔵(全プロバイダー対応) | AI抽出エンドポイント有 | なし(要自作) | なし(要自作) |
| Markdown出力 | 標準搭載 | 対応 | なし | なし |
| JS動的ページ | Playwright内蔵で対応 | 対応 | 非対応(要追加設定) | 非対応 |
| 非同期処理 | asyncio対応 | API経由 | v2.14でasync対応 | 非対応 |
| Docker/API | FastAPIサーバー有 | セルフホスト対応 | なし | なし |
| MCP対応 | コミュニティ実装有 | 公式MCPサーバー有 | なし | なし |
| GitHub Stars | 約59,600+ | 約72,000+ | 約59,700+ | - |
Firecrawlとの違い
Firecrawlは最も頻繁にCrawl4AIと比較されるツールです。両者の決定的な違いはライセンスとコスト構造にあります。
FirecrawlはクラウドAPIとして提供され、無料枠は500クレジット、それ以上はHobby $16/月〜Growth $333/月の月額課金です。ライセンスはAGPL-3.0で、API利用や社内運用では公開義務は生じませんが、ソフトウェアを改変して外部に配布する場合はソースコード公開義務が発生します(出典: Firecrawl公式)。
一方、Crawl4AIはApache-2.0ライセンスで商用利用が可能です(帰属表示条項あり)。セルフホスト前提のためマネージドサービスはありませんが、APIコストが発生しないため大量ページのクロールではコスト優位性が大きくなります。
Scrapy・BeautifulSoupとの違い
ScrapyやBeautifulSoupは汎用的なスクレイピングツールとして長い実績がありますが、LLM向けの機能は搭載されていません。Markdown変換、LLM抽出、チャンク分割といったAIパイプライン向けの前処理を行うには、追加の開発が必要です。
Crawl4AIはこれらの処理をワンパッケージで提供するため、RAGやAIエージェント開発ではセットアップ工数を大幅に削減できます。
実践的なユースケース
ドキュメントサイトの一括取得とRAG構築
技術ドキュメントをCrawl4AIで一括クロールし、ベクトルDBに格納して社内向けAIアシスタントを構築するパターンです。公式ドキュメントのDeep Crawl機能を使えば、サイトマップに沿って全ページを自動巡回できます。
ニュース・ブログの定期収集
RSSフィードの代わりにCrawl4AIで特定サイトを定期クロールし、最新記事をMarkdownで取得する運用です。cronやn8nと組み合わせて自動化すると、手作業なしでデータ収集パイプラインを構築できます。
ECサイトの価格・商品情報モニタリング
JsonCssExtractionStrategyを活用して、ECサイトの商品名・価格・在庫状況を構造化データとして定期取得します。LLMのAPI費用が不要なため、大量商品の監視にも低コストで対応できます。
導入時の注意点
robots.txtと利用規約の遵守
Crawl4AIはあくまでクロール実行のツールであり、対象サイトのrobots.txtや利用規約に従う責任は利用者側にあります。スクレイピング対象の許可範囲を事前に確認し、適切なクロール間隔を設定してください。
リソース消費
Playwrightベースのブラウザ自動化を行うため、ヘッドレスブラウザのメモリ消費量はBeautifulSoupなどの軽量パーサーに比べて大きくなります。大量ページを同時クロールする場合は、サーバーのメモリとCPUリソースに注意が必要です。
セルフホスト運用の考慮
クラウドマネージドサービスが公式には提供されていないため、可用性や監視は自前で設計する必要があります。Docker + FastAPIサーバー構成で運用する場合は、v0.7.7以降のリアルタイム監視ダッシュボードを活用するとオペレーション負荷を軽減できます。
まとめ
Crawl4AIは、WebデータをLLMやRAGに活用したいエンジニアにとって有力な選択肢です。Apache-2.0ライセンスで完全無料、Markdown変換・LLM抽出・非同期クロールがワンパッケージにまとまっている点は、他のツールにはない強みです。
まずは pip install crawl4ai でインストールし、数行のコードでMarkdown変換を体験してみてください。LLMとの連携は後からでも段階的に導入できます。
- 公式リポジトリ: github.com/unclecode/crawl4ai
- 公式ドキュメント: docs.crawl4ai.com
- PyPI: pypi.org/project/crawl4ai