Firecrawlとは何か、一言で言うと

Firecrawlは、URLを渡すとWebページの内容をMarkdownやJSON形式で取得してくれるスクレイピングAPIだ。JavaScriptで動くページ(いわゆるSPA)にも対応していて、Seleniumのような複雑なセットアップなしに使える。料金はAPIコール数に応じた従量課金で、月500回まで無料で試せる。

エンジニアでない自分がなぜ試したかというと、競合サイトの更新情報を定期的にチェックする作業が面倒になったからだ。毎日手動でサイトを見て回るのに30分かかっていた。それをなんとかしたかった。

実際にやってみた手順

公式サイトでアカウントを作るとAPIキーが発行される。そこから先は、ターミナルでcurlコマンドを叩くだけで動いた。

curl -X POST https://api.firecrawl.dev/v1/scrape \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -d '{"url": "https://example.com"}'

これだけで、対象ページのテキストがMarkdown形式で返ってくる。HTMLのタグが取り除かれて、本文だけが整理されて出てくるのが地味に便利だった。

Pythonを少し書ける人なら、requestsライブラリで同じことができる。自分はこちらで動かした。

import requests

response = requests.post(
    "https://api.firecrawl.dev/v1/scrape",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={"url": "https://example.com"}
)
print(response.json()["data"]["markdown"])

ChatGPTにコードを書かせながら進めたので、Pythonの知識がほとんどなくても30分で動くところまでたどり着けた。

複数ページをまとめて取得する「クロール」機能

Firecrawlには、サイト全体を再帰的に巡回するcrawlエンドポイントもある。トップページのURLを渡すと、リンクをたどってすべてのページを取得してくれる。

大きなサイトに使うと時間がかかるので、maxDepth(何階層まで潜るか)とlimit(最大ページ数)を設定するのが現実的だ。自分は5ページ程度の小さなサイトを対象にしたので問題なかった。

使ってみてわかった制限

ログインが必要なページは取得できない。会員専用コンテンツや、Cookieがないと表示されないページは対象外だ。また、一部のサイトはFirecrawlのアクセスをブロックしている。そういうサイトに使っても、エラーが返ってくるだけだった。

利用規約には「サイトのrobots.txtを尊重する」と書いてある。スクレイピングを明示的に禁止しているサイトに使うのは、ツールの仕様上でも避けるべきだ。

コスト感覚

月500回の無料枠は、毎日1サイトを確認するくらいなら十分持つ。複数サイトを頻繁に取得するなら、有料プランの検討が必要になる。1ページの取得が1クレジット換算なので、使用量の計算はしやすい。