0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【検証】1000サイトでWebスクレイピング精度とコストを比較してみた(BeautifulSoup vs Playwright vs Scraping AI)

0
Posted at

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%
  • 抽出ターゲット:

    • 商品名 / 記事タイトル
    • 価格 / 日付(数値化)
    • カテゴリ
    • 在庫ステータス
  • 比較対象:

    1. BeautifulSoup(静的CSSセレクター)
    2. Playwright + BeautifulSoup(ヘッドレスブラウザ + セレクター)
    3. Scraping AI Python 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

特に、対象サイト数が増えるほど「スクレイピングコードを書くコスト」よりも、サイト側の変更に追従するための保守コストが大きな課題になります。

そのため、スクレイピングを一度きりのデータ取得ではなく、継続的なデータパイプラインとして運用する場合は、セレクターに依存しないアプローチも選択肢になると考えています。

参考リンク


運営企業・チームについて

Scraping AIは、株式会社SMSデータテックのAIベンチャー子会社であるindigodata株式会社が開発・運営しています。

国内500件以上の受託データ収集実績を持つ「PigData」の知見をベースに、開発者向けのセルフサーブ型LLMスクレイピングAPIを提供しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?