Crawleeは、Python向けのウェブスクレイピングとブラウザ自動化ライブラリです。BeautifulSoup、Parsel、Playwrightなど複数の解析・実行バックエンドを共通インターフェースで扱え、リクエストキューやデータ保存、プロキシローテーションなど本番運用に必要な機能を一式内蔵しています。PyPIの`crawlee`パッケージとして配布され、CLIテンプレートからプロジェクトを素早く始められます。
中心にあるのは`BasicCrawler`を土台にした複数のクローラークラスです。`BeautifulSoupCrawler`と`ParselCrawler`はHTTPクライアント(既定は`ImpitHttpClient`)でページを取得し、HTMLをパースします。`PlaywrightCrawler`はブラウザを操作してJavaScript実行後のページを扱います。取得したURLは永続化された`RequestQueue`に積まれ、ハンドラー内で`enqueue_links`などを呼ぶと新規リンクが自動でキューに追加されます。結果は`Dataset`や`KeyValueStore`として`storage/`配下にファイル保存され、実行のたびに再開や重複排除ができます。並列度はCPUやメモリ使用状況(psutil)に応じて自動調整され、プロキシローテーションやセッション管理、robots.txt尊重、フィンガープリント生成などの機能もオプション拡張(`pyproject.toml`の`extras`)として用意されています。
- STEP 01
`python -m pip install 'crawlee[all]'`を実行すると、コア機能に加えBeautifulSoup・Parsel・Playwrightなど全拡張がまとめてインストールされます。
- STEP 02
`playwright install`を実行すると、ブラウザバイナリのダウンロードが始まり、数百MB規模のディスク消費と数分の待ち時間が発生します。
- STEP 03
README記載の`BeautifulSoupCrawler`サンプルを実行すると、カレントディレクトリに`storage/`フォルダが自動生成され、`request_queues`と`datasets`のJSONファイルが確認できます。
- STEP 04
`crawler.router.default_handler`にハンドラーを書いて`enqueue_links`を呼ぶと、同一サイト内のリンクを再帰的にたどり、`max_requests_per_crawl`で件数を止められる挙動が確認できます。
- STEP 05
`uvx 'crawlee[cli]' create my-crawler`でCLIを試すと、cookiecutterベースの対話式プロンプトが起動し、クローラー種別やパッケージマネージャ(pip・poetry・uv)を選ぶテンプレートが生成されます。
実行すると`storage/`ディレクトリ配下に、クロール対象URLを管理する`request_queues`と、抽出データが入った`datasets`のJSONファイル群が手元に残ります。CLIテンプレートを使えば、Dockerfileや`pyproject.toml`を含む実行可能なプロジェクト一式がその場で生成されます。
`PlaywrightCrawler`を使う場合は`playwright install`によるブラウザバイナリの追加取得が必須で、ディスクとネットワークのコストがかかります。
Python 3.10以上が必須のため、古い環境では動作しません。
`pyproject.toml`のoptional extraが`adaptive-crawler`・`pydantic-ai`・`sql_postgres`など多数に分かれており、必要な機能に応じて適切な拡張を選ぶ手間があります。
ボット対策の回避性能は対象サイトの防御実装に依存するため、README記載の「人間らしい」挙動が常に有効とは限りません。
本番運用に耐えるPython製クローラーを自作したい開発者や、Scrapyから型ヒント付き・非同期ベースの構成へ移行したい開発者に向いています。README、`pyproject.toml`の依存構成、実際のソースコード(`_request.py`・`_cli.py`など)、豊富な`docs/guides/code_examples`から機能と挙動の裏付けが取れるため、インストールせずとも構成や動作イメージを判断できる材料は十分にそろっています。