Webスクレイピング自作パイプライン vs LLMベースのデータ抽出APIを比較してみた
Webスクレイピングの自作パイプライン(BeautifulSoup / Playwright)と、LLMベースのデータ抽出API(Scraping AI)のパフォーマンス・保守工数・コストを比較するため、1,000サイトを対象に30日間の検証実験を実施しました。
概要・検証環境
今回の検証では、以下の条件で3つのスクレイピング方式を比較しました。
-
検証対象URL数: 1,000 URL
- ECサイト: 35%
- ニュース / ブログ: 30%
- 不動産 / 求人: 20%
- JavaScript SPA: 15%
-
抽出ターゲット:
- 商品名 / 記事タイトル
- 価格 / 日付(数値化)
- カテゴリ
- 在庫ステータス
-
比較対象:
-
BeautifulSoup(静的CSSセレクター) -
Playwright+BeautifulSoup(ヘッドレスブラウザ + セレクター) -
Scraping AIPython SDK(pip install scraping-ai)
-
比較結果サマリー
| 評価項目 | BeautifulSoup (静的) | Playwright (ヘッドレス) | Scraping AI |
|---|---|---|---|
| 初日 抽出成功率 | 84.2% | 89.1% | 96.4% |
| 30日後 抽出成功率(コード無修正) | 61.2% | 68.5% | 95.8% |
| 1ページあたり平均レイテンシ | 0.4秒 | 3.8秒 | 1.2秒 |
| JS動的ページ対応率 | 12.0% | 91.0% | 94.5% |
| 月間平均保守工数(エンジニア時間) | 5.2時間 | 4.4時間 | 0時間 |
主な知見
1. セレクターの経年劣化(レイアウト変更)
静的セレクターを利用した場合、30日以内に38.8%のスクレイパーがエラー停止しました。
主な原因は以下のようなサイト側の変更です。
- HTMLクラス名の変更
- CSSクラスの難読化(例:
._2xK8など) - DOM構造の変更
- ページレイアウトの変更
スクレイピングでは、取得対象のWebサイトが変更されるたびにセレクターの修正が必要になるため、対象サイトが増えるほど保守コストが問題になります。
2. LLMによる意図抽出(ゼロ・セレクター)
Scraping AIでは、CSSセレクターを直接指定するのではなく、抽出したいデータのスキーマ定義を渡してデータを取得します。
例えば、
{
"title": "string",
"price": "number",
"in_stock": "boolean"
}
のように「何を取得したいか」を定義します。
そのため、従来の「この要素からタイトルを取得する」といったセレクター依存の実装と比較して、Webサイトのデザイン変更による影響を抑えられることが特徴です。
3. 失敗した3.6%の内訳
一方で、すべてのサイトで成功するわけではありませんでした。
主な失敗要因は以下です。
- 強固なCAPTCHA防御
- Cloudflare Turnstileなどのボット対策
- ログイン必須サイト
- SNSなど、規約上スクレイピングに対応していないサイト
今回の検証では、ステルス自動回避の成功率は約85%でした。
このため、LLMベースのスクレイピングAPIであっても、CAPTCHAや認証などの制約を完全に解決できるわけではない点には注意が必要です。
コスト試算(月間5,000ページ抽出の場合)
次に、月間5,000ページを抽出するケースを想定してコストを比較しました。
自作スクレイパーの場合
- ライブラリ費用: $0
- プロキシ費用: $25 / 月
- ヘッドレスブラウザサーバー費用: $15 / 月
- 保守工数: 月4.8時間 × $60/h = $288 / 月
- 合計月間コスト: $328 / 月
- 年間コスト: $3,936
Scraping AIを利用する場合
- APIトークン費用(Growthプラン、5,000トークン): $30 / 月
- アンチボット / プロキシインフラ: $0(APIに含まれる)
- 保守工数: 0時間
- 合計月間コスト: $30 / 月
- 年間コスト: $360
この試算では、
年間コストを約90%削減(年間$3,576の節約)
という結果になりました。
ただし、実際のコストは取得ページ数、ページの複雑さ、プロキシ利用量、APIプラン、エンジニアの人件費などによって変動します。
実装コードの比較
ここでは、Scraping AIのPython SDKを利用した場合の実装例を紹介します。
Scraping AI Python SDK
まずSDKをインストールします。
pip install scraping-ai
CSSセレクターを指定せず、抽出したいデータの構造を指定してJSONとして取得できます。
from scraping_ai import ScrapingAIClient
# クライアント初期化
client = ScrapingAIClient(api_key="YOUR_API_KEY")
# CSSセレクター指定なしで構造化JSONを直接取得
data = client.extract(
url="https://example.com/products/headphones",
schema={
"title": "string",
"price": "number",
"in_stock": "boolean"
}
)
print(data.results)
非同期処理
AsyncIOを利用した非同期処理にも対応しています。
import asyncio
from scraping_ai import AsyncScrapingAIClient
async def main():
async with AsyncScrapingAIClient(api_key="YOUR_API_KEY") as client:
data = await client.extract(
url="https://example.com/products/headphones",
schema={
"title": "string",
"price": "number"
}
)
print(data.results)
asyncio.run(main())
大量のURLを処理する場合は、非同期処理を利用することで、より効率的にデータ収集を行えます。
まとめ
今回の検証では、スクレイピングの方式によって、単純な初期抽出成功率だけでなく、30日後の安定性や保守工数にも大きな差が出ることが分かりました。
それぞれの方式には向き・不向きがあります。
-
単発スクリプトや完全無料にこだわる場合
BeautifulSoup
-
JavaScriptサイトなどを含めた柔軟なブラウザ操作が必要な場合
Playwright
-
長期間の本番運用や保守コストの削減を重視する場合
Scraping AI
特に、対象サイト数が増えるほど「スクレイピングコードを書くコスト」よりも、サイト側の変更に追従するための保守コストが大きな課題になります。
そのため、スクレイピングを一度きりのデータ取得ではなく、継続的なデータパイプラインとして運用する場合は、セレクターに依存しないアプローチも選択肢になると考えています。
参考リンク
-
無料登録(200トークン付与・クレカ不要)
https://pig-data.jp/service/scraping-ai/ -
PyPI Package
https://pypi.org/project/scraping-ai/
運営企業・チームについて
Scraping AIは、株式会社SMSデータテックのAIベンチャー子会社であるindigodata株式会社が開発・運営しています。
国内500件以上の受託データ収集実績を持つ「PigData」の知見をベースに、開発者向けのセルフサーブ型LLMスクレイピングAPIを提供しています。