今日の優良食堂
実際に入れて動かして書いた、今日の一膳
ギット飯が代わりに導入・実行・コードまで確かめました
今日の優良食堂 · ギット飯が代わりに導入・分析

apify/crawlee

HTTP と HeadlessブラウザでのWebスクレイピングと自動化を統一インターフェースで実現するNode.jsライブラリです。

大規模ECサイトの商品情報や価格を集めたいとき、まず立ちはだかるのがボット判定です。Crawleeなら PlaywrightとPuppeteer、Cheerioを同じインターフェースで切り替えられ、初期設定のままで人間らしいTLSフィンガープリントとヘッダーが自動生成されるため、複雑なセキュリティ回避コードを書かずに済みます。JavaScriptレンダリングが必要な動的サイトも、APIのJSON取得も、リクエストキューとデータストレージが自動管理される同じコードベースで試せるので、今日中に手元で1本クローラーを動かしてみたくなります。

01 / 概要
何をするものか一文で言うと
ひとことでHTTP と HeadlessブラウザでのWebスクレイピングと自動化を統一インターフェースで実現するNode.jsライブラリです。

Crawleeは、Node.js向けのWebスクレイピング・ブラウザ自動化ライブラリです。CheerioやJSDOMによるHTTPクロールと、PuppeteerやPlaywrightによるヘッドレスブラウザクロールを、同一インターフェースで扱えます。リクエストキューやデータセットなどの永続ストレージ、プロキシローテーション、セッション管理、自動スケーリングも標準搭載しています。

02 / 構造
どう動くのか中核のしくみ
読み方動きの流れを図と一緒にほどきました。

中核はpackages/basic-crawlerのBasicCrawlerで、これをCheerioCrawler・PuppeteerCrawler・PlaywrightCrawlerが拡張する構造です。RequestQueueにURLを積み、requestHandlerで各ページを処理し、enqueueLinksで新しいリンクを同じキューに追加していく仕組みです。@crawlee/coreがストレージ抽象化(MemoryStorageBackendなど、serviceLocatorで注入)を、@crawlee/http-clientやgot-scrapingがブラウザらしいTLSフィンガープリントとヘッダー生成を担当します。SessionPoolがプロキシ・セッションの割り当てと再試行判断を行い、AutoscaledPoolがCPU・メモリ負荷を見てconcurrencyを自動調整します。取得データはDataset.pushDataで./storage/datasets以下にJSONとして保存され、テストコード(test/batch-add-requests.test.tsなど)を見ると、リクエスト追加が1000件単位でチャンク化される挙動やsession.idの解決ロジックが実装として確認できます。

03 / 体験
入れるとこんな体験になりますギット飯が実際にたどった順序
所要ギット飯が実際に導入・実行しながらたどった順序です。
  1. STEP 01

    npx crawlee create my-crawlerを実行すると、CheerioCrawlerかPlaywrightCrawlerなどのテンプレートを選ぶ対話式プロンプトが出て、選択後に依存パッケージが自動インストールされます。

  2. STEP 02

    cd my-crawler && npm startで実行すると、コンソールにTitle of https\://... is '...'のようなログが流れ、クロール対象URLが次々処理される様子が見えます。

  3. STEP 03

    実行が終わると、プロジェクト内に./storage/datasets/default/というフォルダが作られ、各ページの抽出結果がJSONファイル1件ずつ保存されています。

  4. STEP 04

    ./storage/request_queuesフォルダにも中身が残るため、同じコマンドを再実行すると未処理分から再開される挙動を確認できます。

  5. STEP 05

    PlaywrightCrawlerを使う場合はheadless\: falseに変更すると、実際にChromiumウィンドウが立ち上がりページ遷移が目視できます。

  6. STEP 06

    プロキシを使わない状態でも、got-scrapingによりブラウザらしいHTTPヘッダーが自動生成されている点は、リクエストログやネットワークキャプチャで確認可能です。

04 / 成果物
何が手に入るのか導入後に手元に残るもの

実行後は、./storage配下にクロール結果のJSONデータセットとリクエストキューの状態が残り、途中で止めても再実行で再開できる永続クロールパイプラインが手に入ります。npx crawlee createで作ったプロジェクトはそのままnpm startで動く最小構成のスクレイパーになっています。

05 / 注意
ここは先に知っておいてください先に知っておくとよいこと
正直なところ誰にでも合うとは言いにくいところです。
01

PlaywrightCrawlerやPuppeteerCrawlerを使う場合、playwrightやpuppeteer本体は同梱されていないため、別途npm installが必要です。

02

basic-crawlerパッケージのengines指定はnode>=22.0.0のため、READMEにある「Node.js 16以上」という表記より実際は要求バージョンが高い可能性があります。

03

テストコードのdocker関連スクリプト(test\:integration\:services\:up)を見ると、統合テストにはDockerでbrowserlessやhttpbinを立てる必要があり、フルテストの再現には追加インフラが要ります。

04

ドキュメント配下のコード例は多数のガイド(プロキシ管理・セッション管理・OpenTelemetryトレースなど)に分かれており、全機能を把握するには公式ドキュメントとの併読が実質必須です。

06 / 結論
ギット飯の結論食べてみる価値のある一膳か
ギット飯の最終判断優良食堂

HTTPクロールとブラウザクロールを1つのAPIで切り替えたいNode.js/TypeScript開発者、特にAI・RAG向けのデータ収集やプロキシ・セッション管理を含む本格スクレイパーを組みたい人に向いています。README・package.json群・basic-crawlerの実ソースとテストコードから、キュー永続化・ストレージ抽象化・セッション再試行という主要な動作原理が裏付けられているため、インストールせずともこの判断は妥当と考えられます。ただし実際の要求Node.jsバージョンやブラウザ依存の別途インストールなど、細かな環境差は自分の手元でも確認したほうが安全です。

今日の残りの一膳
SUBSCRIBER LIBRARY
これまでに検証した優良食堂を一堂に

4 つの関門を通った優良食堂がすべてバックナンバーに集まっています。いちばん新しい一膳はどなたでも無料で読め、それより前の優良食堂の検証の根拠・詳しい解説は ギット飯 プレミアムのご購読ですでに開いています。

優良食堂バックナンバー →
リポジトリ詳細🧪 ひと言で味見する