Firecrawlで簡単スクレイピング：Pythonプログラムでの実践例

![IMG_2772.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/cdbd2e65-76ef-d93c-7705-b0ea9d3d0fa3.jpeg)


# はじめに  
前回と前々回は、**browser-use**に関する記事を投稿し、AIが自律的にWebブラウザを使ってコンテンツ情報を取得する仕組みについて解説しました。今回は、Webブラウザを介さずに「スクレイピング」という手法でコンテンツ情報を取得するツール、**Firecrawl**を試してみます。  

ただし、「スクレイピング」は誤った使い方をすると他のWebサイトに迷惑をかけたり、トラブルを引き起こす可能性があります。そのため、ご自身が管理しているWebサイトや利用許可を得たサイトでのみ実施するようにしてください。  

それでは、**Firecrawl**を使ったスクレイピングに挑戦してみましょう！


# Firecrawlについて  
**Firecrawl**は、指定したURLをクロールし、その内容をマークダウン形式や構造化データに変換するAPIサービスです。手軽にウェブ情報を整理・変換できるため、データ収集や分析に役立つツールです。  
今回は、以下の公式ドキュメントに掲載されているプログラムを参考に進めていきます。  

https://docs.firecrawl.dev/v0/sdks/python

## FirecrawlからAPIキーを取得する方法  

Firecrawlを使用するには、まずAPIキーを取得する必要があります。以下の手順に従ってAPIキーを取得してください。  

### サインイン  

**Firecrawl**公式サイトにアクセスします。  
サインインまたは新規登録を行うため、以下のリンクをクリックしてください:  

https://www.firecrawl.dev/signin/signup

### APIキーの確認  
サインイン（またはログイン）後、ダッシュボードが表示されます。  
画面右側に「API Key」の欄があり、「fc-***********」と表示された部分がAPIキーです。このキーをコピーしておきましょう。  

   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/1a88080c-8dfe-466a-7d50-041dae239a90.png)  

### 環境変数にAPIキーを設定  
前回の記事でも説明しましたが、APIキーをコードに直接書き込むと、**GitHub**にソースコードをアップロードする際などにセキュリティ上の問題が発生します。そのため、APIキーは環境変数に設定して管理するのがおすすめです。 

コマンドプロンプトで以下のコマンドを実行して設定します。  

```cmd
SET FIRECRAWL_API_KEY=fc-******************
```

または、Windowsの環境設定ダイアログから、手動で環境変数を追加してください。  
この方法を使用すると、プログラム内で環境変数を利用してAPIキーを安全に扱うことができます。



# プログラミング
以下に今回のプログラムを示します。特に注目すべきポイントについても解説しています。  
また、このプログラムは**GitHub**に`app2.py`として公開していますので、自由にダウンロードしてご利用ください。

https://github.com/kimkimkim5/firecrawl

```python:app2.py
import datetime
import pytz
from firecrawl import FirecrawlApp
import os

# 日本時間の設定
JST = pytz.timezone('Asia/Tokyo')

# 出力ファイル名（タイムスタンプ付きで重複防止）
output_filename = f"crawl_results_{datetime.datetime.now(JST).strftime('%Y-%m-%d-%H-%M-%S')}.txt"

# Firecrawlの初期化とクロール実行
app = FirecrawlApp(api_key=os.getenv("FIRECRAWL_API_KEY"))
params = {'crawlerOptions':{'excludes':['blog/*']}}
crawl_result = app.crawl_url('www.npwitys.com', params=params)

# 結果をテキストファイルに出力
with open(output_filename, 'w', encoding='utf-8') as f:
    for result in crawl_result:
        f.write(result['markdown'] + '\n')

print(f"クロール結果を {output_filename} に出力しました。")
```

## 特筆する点  

今回のプログラムでは、利用するライブラリ「**firecrawl-py**」およびプログラム内で活用している「**FirecrawlApp**」について以下のように説明します。  

### 1. **firecrawl-pyについて**  
Firecrawlを利用するには、事前にライブラリ「**firecrawl-py**」をインストールする必要があります。  
ただし、最新版のライブラリを使用するとエラーが発生することが判明したため、以下のように特定のバージョンを指定してインストールしました。  

```cmd
pip install firecrawl-py==0.0.16
```

なお、**GitHub**リポジトリには`requirements.txt`が用意されています。そのため、以下のコマンドを実行すれば必要なライブラリが全てインストールされ、バージョンも自動的に適切なものが設定されます。  

```cmd
pip install -r requirements.txt
```

### 2. **FirecrawlAppについて**  
プログラムでは、FirecrawlのAPIキーを環境変数から取得しています。以下のコードがその処理部分です。  

```python
app = FirecrawlApp(api_key=os.getenv("FIRECRAWL_API_KEY"))
```

また、特定の条件でデータを抽出するため、抽出条件を以下のように設定しています。この例では、`blog`パスに一致するものを除外しています。  

```python
params = {'crawlerOptions': {'excludes': ['blog/*']}}
```

さらに、対象のURLとして、私個人のホームページ`www.npwitys.com`を指定しています。  

```python
crawl_result = app.crawl_url('www.npwitys.com', params=params)
```

これらのポイントを参考にしながら、プログラムをカスタマイズしてご利用ください。



# 実行  

それでは、プログラムを実行してみましょう。  

```python
python app2.py
```

実行すると、以下のようにホームページのコンテンツ情報を取得し、テキストファイルに保存できました。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/b705b06a-0621-c50f-de57-ef69f12a5f3b.png)  


# おわりに  
今回のプログラムでは、コンテンツ情報をテキストファイルに出力するところまでは実現できましたが、この結果だけでは実用性に欠ける部分があります。  

一方で、他の投稿記事やYouTubeを調べたところ、**Dify**を使えば、より視覚的で簡単に**Firecrawl**を活用できることが分かりました。次回は、**Dify**の「ワークフロー機能」を使って、さらに高度な処理を試してみたいと思います。  

下図のように、Difyではワークフローを作成して効率的に操作を行えるようです。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/800f94a2-bef8-1c2c-9d32-28489d34eef8.png)  

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