🔍

Firecrawlその2:セルフホストについて

2024/09/02に公開

1. はじめに

  • この記事は?

    • この記事は前回のFirecrawlについて記載した記事の続きとなります。前回の記事ではFirecrawlの概要や特徴について紹介しましたが、今回はFirecrawlのセルフホストについて詳しく解説します。
  • 前回の記事

    • 前回の記事はこちらです。Fiewcrawlの主な機能や利点について解説しており、基本的な使い方や料金プランについても触れています。

https://zenn.dev/kosukeuchida/articles/0e679531594d77

2. Firecrawlのセルフホストについて

Fiewcrawlは以下のGithubリポジトリでCodeが公開されています。

https://github.com/mendableai/firecrawl

  • セルフホスト
    • 基本的には上記リポジトリの以下資料を参考にすれば、セルフホストでの実行が可能です。
    • 事前準備としてGitやDockerが必要です。

https://github.com/mendableai/firecrawl/blob/main/SELF_HOST.md

  • セルフホスト手順
    • 基本的な手順を記載します。オプションなどについては上記リンクを参照してください。
      1. Gitリポジトリをクローン
      git clone https://github.com/mendableai/firecrawl
      
      1. 環境変数を設定
      cd firecrawl
      cp ./apps/api/.env.example ./.env
      
      コピーした.envファイルを編集します。必須の部分のみ記載します。
      # ===== Required ENVS ======
      NUM_WORKERS_PER_QUEUE=8
      PORT=3002
      HOST=0.0.0.0
      REDIS_URL=redis://redis:6379
      REDIS_RATE_LIMIT_URL=redis://redis:6379
          
      ## To turn on DB authentication, you need to set up supabase.
      USE_DB_AUTHENTICATION=false
      
      1. Docker Containerをビルドして実行
      docker compose build
      docker compose up
      
      1. 起動確認
      1. (オプション) APIテスト
        クロール エンドポイントをテストする場合は、次のコマンドを実行できます。
      curl -X POST http://localhost:3002/v0/crawl \
          -H 'Content-Type: application/json' \
          -d '{
              "url": "https://mendable.ai"
          }'
      

3. Firecrawlのセルフホスト時の注意点

  • 注意点
    • 現在、Firecrawlは開発初期段階にあり、完全なセルフホストデプロイの準備はまだ完了していません。
    • ローカルでの実行は可能ですが、一部の機能が制限されています。
    • 詳細:

https://github.com/mendableai/firecrawl/blob/main/SELF_HOST.md#considerations

  • セキュリティ考慮事項
    • Firecrawlをパブリックにセルフホストして使用する場合、以下の点に注意が必要です:
      • セキュリティ機能が組み込まれていないため、自身でセキュリティ対策を講じる必要があります。
      • 過度な負荷やブロックされるリスクがあるため、使用には注意が必要です。

また、利用する際には以下のライセンス条項にも注意が必要です。(基本的にAGPL-3.0ライセンス)
https://github.com/mendableai/firecrawl?tab=AGPL-3.0-1-ov-file#readme

業務で使用する場合は、これらの点を考慮し、SaaSバージョンの利用も検討する必要があると思います。
最後に再掲となりますが、前回の記事であげた取得するデータについてもご注意ください。

4. Fiewcrawlの使い方

基本的な使い方については前回の記事を参照してください。
今回はセルフホストをすることで実行可能な,pythonでのスクレイピングとクローリングの例を示します。

  • スクレイピングの例
from firecrawl import FirecrawlApp

app = FirecrawlApp(
    api_key=API_KEY, 
    api_url=API_BASE   # Firecrawl をローカルで実行する場合は指定する
)

params = {
    "pageOptions": {
        "onlyMainContent": True,                    # メインコンテンツのみ取得(default: False)
        "includeHtml": True,                        # HTMLを取得(default: False)
        "includeRawHtml": False,                    # 生のHTMLを取得(default: False)
        "screenshot": False,                        # スクレイピングするページの上部のスクリーンショットを取得(default: False)
        "waitFor": 500,                             # ページの読み込みを待つ時間、単位ミリ秒(default: 0)
        "removeTags": [],                           # 除外するタグ(default: [])
        "onlyIncludeTags": [],                      # 取得するタグ(default: [])
        "headers": {},                              # リクエストと共に送信するヘッダー(default: {})
        "replaceAllPathsWithAbsolutePaths": True,   # 相対パスを絶対パスに置換(default: False)
        "parsePDF": True                            # PDFをパース(default: True)
    }
}

scrape_result = app.scrape_url(
    url="https://www.firecrawl.dev/",
    params=params
)

scrape_result
  • クローリングの例
from firecrawl import FirecrawlApp

app = FirecrawlApp(
    api_key=API_KEY, 
    api_url=API_BASE   # Firecrawl をローカルで実行する場合は指定する
)

params = {
    "crawlerOptions": {
        "excludes": ["blog/*"],    # 除外するURLパターン(default: [])
        "maxDepth": 2,              # クロールする最大深度(default: 1)
        "maxPages": 10,             # クロールする最大ページ数(default: 1)
        "maxRetries": 3,            # リトライする最大回数(default: 3)
        "waitBetweenRequests": 500  # リクエスト間の待機時間、単位ミリ秒(default: 0)
    }
}

crawl_result = app.crawl_url(
    url="https://www.firecrawl.dev/",
    params=params
)

crawl_result

5. まとめ

  • まとめ

    • セルフホストでの実行が可能なFirecrawlについて、基本的な手順や注意点について解説しました。
    • お手軽にでき、またカスタマイズ性も高いため、スクレイピングやクローリングを行いたい場合には有用なツールであると感じました。
    • ただし、セキュリティや安定性については注意が必要ですので、業務で使用する場合は慎重に検討することが重要です。
    • 今後のアップデートにも期待したいと思います。
  • 次回試すこと

    • Difyとの連携が可能であるため、次回はその紹介を行いたいと思います。

最後までお読みいただき、ありがとうございました。

6. 参考リンク

以下のリンク先の記事が大変参考になりましたので、ここに記載させていただきます。

https://zenn.dev/kun432/scraps/58fce97899cfdd

Discussion