AnyCrawlは、Node.js/TypeScriptで書かれたクローリング・スクレイピングツールキットです。Webページを LLM向けのMarkdownやJSON形式に変換したり、Google・Bing・Baiduなど複数の検索エンジンからSERP結果を構造化して取得したりします。API・キュー・DB・AI抽出の各パッケージがモノレポ構成で連携し、バッチ処理やサイト全体クロールにも対応します。
apps/api配下のExpressベースのControllerがv1エンドポイント(scrape・crawl・batch scrape・search・dataset・templateなど)を受け付けます。リクエストはZodスキーマ(scrapeSchema・crawlSchemaなど)で検証され、@anycrawl/scrapeパッケージのQueueManagerやrunAutoCrawl・runBatchScrapeがジョブをキューに登録します。実際の取得処理はcheerio(静的HTML解析)・playwright・puppeteer(JS実行)という複数エンジンから選択でき、Dockerfileのset-engines.shがアーキテクチャに応じて利用可能エンジンを切り替えます。取得結果は@anycrawl/dbのDataset Writerを通じてSQLite等に保存され、Webhookやポーリング用APIで取り出せます。認証はAPIキー方式で、CheckCreditsMiddleware・DeductCreditsMiddlewareが課金・クレジット消費を制御し、ConcurrencyMiddlewareが同時実行数を制限します。Redisサーバーとsupervisorが同一コンテナ内で起動し、キュー処理と複数プロセス実行を支えています。
- STEP 01
リポジトリをクローンし、pnpm installで多数のワークスペースパッケージ(api・scrape・search・db・ai・template-client)の依存関係が一括インストールされる様子を確認します。
- STEP 02
Dockerfileをビルドすると、redis-server・supervisor・playwrightの依存ライブラリが同時にインストールされ、単一コンテナでAPIとRedisが同時起動する構成であることが分かります。
- STEP 03
ANYCRAWL_API_AUTH_ENABLED=trueを設定した状態でpnpm --filter api key:generateを実行すると、uuid・キー・クレジット数が標準出力に表示され、それをBearerトークンとして使う流れを体験できます。
- STEP 04
curlでPOST /v1/scrapeにengine:cheerioを指定してリクエストすると、静的HTML解析による高速なスクレイピング結果がJSONで返る一方、playwrightやpuppeteerを指定するとJS実行込みの取得になり応答時間が変わることを実感します。
- STEP 05
crawlやbatch-scrapeエンドポイントを叩くと、ジョブIDが即座に返り、非同期でジョブが処理される様子をポーリングAPIやWebhookで確認する必要があります。
稼働させると、SERP検索結果やWebページのMarkdown・JSON化されたデータをAPI経由で取得できます。ジョブ単位での実行状況管理やデータセットへの蓄積、Webhook通知、クレジット消費ログなど、実運用を意識したAPIサーバー一式が手に入ります。
実際のスクレイピング処理やAI抽出結果はソースからは検証できず、対象サイトの構造やLLM設定に強く依存するため、成果物の質はREADMEやコードからは断定できません。
puppeteerエンジンはDockerビルド時にTARGETARCHがamd64の場合のみ有効化される仕組みで、それ以外のアーキテクチャではplaywrightとcheerioのみに制限されます。
課金・クレジット機構(DeductCreditsMiddlewareなど)はテストコードから挙動の一部が読み取れますが、自己ホスト環境での実運用時の課金設定は環境変数依存で、設定漏れ時の挙動は個別確認が必要です。
ドキュメントは多言語のmdxファイルが大量に存在しますが、実際のAPI挙動の細部(タイムアウト値やリトライ回数など)は各コントローラーのコードを読まないと分からない部分が残ります。
複数エンジンでのスクレイピングとSERP取得、ジョブ管理・課金・Webhookまで含めたAPIサーバーを自己ホストしたいチームに向いています。ControllerやMiddleware、Dockerfileの構成が具体的で一貫しており、テストファイル(billing・cursor・datasetControllerなど)も多数存在するため、コードの整合性については一定の信頼を持って判断できます。ただし実際のクロール品質やAI抽出精度は環境と対象サイトに依存するため、そこは自分の用途で試すまで保証できません。