freeSpider — Dockerベースの動的JS対応高性能クローラー

Tool

概要

freeSpiderは、Dockerで簡単にデプロイできる動的JavaScriptを含むサイトのクロールを想定した高性能クローラーサービスです。FastAPIで実装されたAPIを通じてクロールタスクを投入し、指定したURLを起点にmax_depthで深さを制御して再帰的に巡回します。READMEにあるcurl例のようにJSONでURLと深さを指定するだけで実行でき、タスクの詳細・状態・統計を取得するためのAPIも提供されています。軽量なリポジトリ構成でDockerイメージ化が前提になっており、コンテナ環境での運用を想定した設計が特徴です。

GitHub

リポジトリの統計情報

  • スター数: 3
  • フォーク数: 0
  • ウォッチャー数: 3
  • コミット数: 5
  • ファイル数: 3
  • メインの言語: Python

主な特徴

  • Dockerベースでビルド・デプロイが可能(DOCKER_BUILDKITを利用したビルド手順あり)。
  • FastAPIによるREST APIでタスク登録・状態確認・統計取得をサポート。
  • 動的なJavaScriptレンダリングを想定したクロール機能(動的コンテンツの取得対応)。
  • 深さ(max_depth)指定による再帰クロールで範囲を制御可能。

技術的なポイント

freeSpiderは最小限のファイル構成ながら、コンテナ化とAPI駆動の設計が明確です。Dockerfileにより環境依存を排し、任意のホスト上で同一動作を期待できます。APIはFastAPIで実装されており、非同期処理や高性能なHTTPハンドリングを活かして複数タスクの並列実行や高スループットを見込めます。動的JSのサポートが謳われていることから、サーバ側でヘッドレスブラウザ(例:PlaywrightやChromiumのヘッドレス実行)やレンダリングエンジンを利用してクライアント側で生成されるDOMを取得する設計が想定されますが、リポジトリ内に明示的な外部ブラウザの実装は含まれていないため、追加のバイナリやライブラリをDockerイメージ側で統合する必要がある点に注意が必要です。

APIの利用はシンプルで、curlコマンドにより{“url”: ”…”, “max_depth”: n}のJSONをPOSTするだけでタスクが登録されます。タスクの状態管理や統計情報のエンドポイントがあるため、運用時にはジョブキューやバックグラウンドワーカーと連携させることでスケールや再試行戦略を取り入れやすい設計です。セキュリティ面では、外部サイトへアクセスする性質上、アクセス先の制御、レートリミット、User-AgentやCookie管理、ヘッドレスブラウザのサンドボックス設定などを適切に設定する必要があります。さらに、保存先(メトリクスやクロール結果)の永続化がREADMEに明示されていないため、実運用では結果保存先や監視(ログ、メトリクス収集)を追加する拡張が望まれます。

プロジェクトの構成

主要なファイルとディレクトリ:

  • Dockerfile: file
  • README.md: file
  • service.py: file

まとめ

シンプル構成でDocker+FastAPIにより動的サイトのクロールを手早く試せるプロジェクト。

リポジトリ情報:

READMEの抜粋:

freeSpider

基于docker部署的一款支持动态JS爬取的高性能爬虫服务,基于FastApi框架,支持API调用

安装与部署

DOCKER_BUILDKIT=1 docker build -t hz-spider:1.2 .

启动爬虫任务(以本地运行为例)

— json消息体力url为要检测的网站首页 — max_depth 为爬取深度,网站首页为深度0,其下一层为深度1,依次类推 curl -X POST http://192.168.100.18:8000/crawl
-H “Content-Type: application/json”
-d ’{“url”:“http://www.boohee.com”, “max_depth”:2}‘

支持查看任务详情和任务状态和统计API