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?

【脱・保守地獄】2026年のWebスクレイピング:CSSセレクターのメンテをやめてLLMプロンプトでJSON抽出する

0
Posted at

Webスクレイピングを本番運用したことのあるエンジニアなら、誰もが一度は経験する 「深夜のセレクター崩れ」

サイトのデザイン改修やCSSクラスの難読化(TailwindやCSS Modulesによる ._3xP9z のようなクラス名変更)のたびにスクレイパーが停止し、セレクターを書き直す作業に追われていませんか?

本記事では、従来のDOMトラバース型スクレイピングの課題と、LLMを活用した 「意図ベース抽出(ゼロ・セレクター)」 へのパラダイムシフトについて解説します。


従来のスクレイピングが抱える「保守税(Maintenance Tax)」

スクレイピングの自作自体は簡単ですが、運用フェーズの保守コストが膨大になります。

┌─────────────────────────────────────────────────────────────┐
│                 自作スクレイパーの運用コスト推移             │
├─────────────────────────────────────────────────────────────┤
│ 1ヶ月目: スクリプト初期構築 (4時間)                          │
│ 2ヶ月目: クラス名変更に伴うセレクター修正 (2時間)            │
│ 3ヶ月目: サイトレイアウト全面刷新への追従 (6時間)            │
│ 4ヶ月目: JS動的レンダリング(SPA)のタイムアウト対応 (3時間) │
│ 5ヶ月目: Cloudflare・アンチボット対策とプロキシ調整 (8時間)  │
├─────────────────────────────────────────────────────────────┤
│ 合計: 5ヶ月間で 約23時間のエンジニア工数が消失               │
└─────────────────────────────────────────────────────────────┘

BeautifulSoupやPlaywrightは学習用途には素晴らしいツールですが、ビジネスのデータ収集ラインにおいて、セレクターの定期修正は大きな負担です。


パラダイムシフト:HTML構造から「意味(Semantic)」での抽出へ

LLM(GPT-4o / Gemini等)を活用したデータ抽出では、**「どのようにDOMを巡回するか」ではなく、「何が欲しいか」**を定義します。

例えば、次のような指示です。

このページから商品名、税込価格(数値)、在庫状況をJSON形式で抽出して

従来のスクレイピングでは、HTML構造を解析して特定の要素を指定する必要がありました。

一方、LLMベースのスクレイピングでは、以下のような流れでデータを取得できます。

┌─────────────────┐       ┌─────────────────┐       ┌─────────────────┐
│ 1. HTML取得     │ ─────▶│ 2. Markdown変換 │ ─────▶│ 3. LLMスキーマ  │
│ (httpx/Headless)│       │ (ノイズ削減)     │       │ 照合・推論      │
└─────────────────┘       └─────────────────┘       └─────────────────┘
                                                             │
                                                             ▼
                                                    ┌─────────────────┐
                                                    │ 4. 検証済み      │
                                                    │ 構造化JSON出力  │
                                                    └─────────────────┘

サイトのデザインがテーブル形式からフレックスボックスに変わっても、クラス名がランダムな文字列に変化しても、LLMがページの文脈を解釈することで、DOMセレクターに依存しないデータ抽出を実現できます。


実装:3行のPythonコード(scraping-ai SDK)

公式PyPIパッケージ scraping-ai を使用した実装例です。

まずはパッケージをインストールします。

pip install scraping-ai

同期処理(基本)

URLと欲しいデータのスキーマを渡すだけで、構造化されたJSONデータを取得できます。

from scraping_ai import ScrapingAIClient

# クライアント初期化
client = ScrapingAIClient(api_key="YOUR_API_KEY")

# URLと欲しいスキーマを渡すだけでJSONを取得
# セレクターの記述は不要
data = client.extract(
    url="https://example.com/products/headphones",
    schema={
        "title": "string",
        "price": "number",
        "in_stock": "boolean",
        "rating": "number"
    }
)

print(data.results)

出力されるJSON

{
  "results": [
    {
      "data": {
        "title": "ワイヤレス ノイズキャンセリング ヘッドホン",
        "price": 24800,
        "in_stock": true,
        "rating": 4.7
      },
      "target_url": "https://example.com/products/headphones"
    }
  ]
}

非同期処理(AsyncIO対応)

大量のURLを処理する場合は、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())

比較:自作 vs Scraping AI API

項目 BeautifulSoup + Playwright(自作) Scraping AI(API)
導入時間 サイトごとに2〜4時間 約60秒(APIコールのみ)
セレクター保守 高(サイトのHTML変更時に破損) ゼロ(LLMによる意図抽出)
JS動的描画(SPA) ヘッドレスブラウザ環境の自前構築 自動検出・自動フォールバック
スキーマ検証 Pydantic等の自前バリデータ実装 JSON Schema標準準拠
年間想定コスト ライブラリ$0 + エンジニア工数 $3,000+ 年間 約$60〜$360(トークン従量制)

制約事項と使い分け

技術的な誠実さとして、Scraping AIにも制約事項があります。

自作BeautifulSoupが適しているケース

  • 個人ブログの単発クローリング
  • プログラミング学習
  • 完全無料で運用したい場合
  • HTML構造が安定しているサイト
  • 高速かつ大量のデータを低コストで処理したい場合

Scraping AIが適しているケース

  • 複数ECサイトの価格監視
  • AIモデルへの定期データ連携
  • サイトごとのセレクター管理を減らしたい場合
  • データの意味や内容を基準に抽出したい場合
  • スクレイピング基盤の開発・保守工数を削減したい場合

非対応・制約事項

SNS(X / Instagram等)のスクレイピングは規約上非対応です。

また、極めて厳格なCAPTCHA(Cloudflare Turnstile等)に対する自動ステルス回避には制約があり、すべてのサイトで安定した取得を保証できるわけではありません。

スクレイピングを実際のサービスで利用する場合は、対象サイトの利用規約やrobots.txt、関連する法令・ポリシーなども確認した上で利用してください。


無料で試す(200トークン付与)

Scraping AIは無料アカウントから試すことができます。


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

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

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


まとめ

従来のスクレイピングでは、

「HTMLのどこにデータがあるか」

をセレクターとして定義する必要がありました。

LLMを活用した意図ベース抽出では、

「どんなデータが欲しいか」

をスキーマとして定義するだけで、ページの文脈をもとにデータを抽出できます。

もちろん、すべてのスクレイピングをLLMに置き換える必要はありません。

HTML構造が安定していて大量・高速処理が必要なら従来型、サイト変更への追従やデータの意味理解が重要ならLLMベース。

このように用途に応じて使い分けることで、スクレイピング基盤の開発・運用コストを大きく削減できる可能性があります。

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?