GPT-4oを活用したWebスクレイピング: 強力だが高コスト
(blancas.io)- OpenAIの新しい構造化出力機能を使って、AI支援Webスクレイパーを開発した経験をまとめた記事
GPT-4oにデータスクレイピングを依頼する
- 最初の実験では、GPT-4oにHTML文字列からデータを抽出するよう依頼
- Pydanticモデルを使って構造化出力を設定
from typing import List, Dict class ParsedColumn(BaseModel): name: str values: List[str] class ParsedTable(BaseModel): name: str columns: List[ParsedColumn] - システムプロンプトは次のとおり:
あなたはWebスクレイピングの専門家です。HTMLテーブルの内容を受け取り、構造化データを抽出しなければならない
複雑なテーブルをパースする
- シンプルなテーブルを試した後、Weather.comの10日間天気予報のような複雑なテーブルをテスト
- GPT-4oは
Day/Night列を追加し、データを正確にパース Condition列がWebサイト上で見えなかったためハルシネーションかと思われたが、ソースコードを確認すると実在するタグだった
結合された行がモデルを壊す
- Wikipediaのシンプルなテーブル(Human Development Index)をテストしたが、結合された行のためモデルが失敗
- システムプロンプトを修正してみたが効果はなかった
GPT-4oにXPathの返却を依頼する
- OpenAI API呼び出しコストを下げるため、パース済みデータの代わりにXPathを返すよう依頼
- しかし、モデルが誤ったXPathを返したり、データを返さなかったりすることが多かった
2つのアプローチを組み合わせる
- データを抽出した後、それを参照してXPathを要求するアプローチを試行
- この方法はより良い結果をもたらしたが、画像がテキストに変換される問題が発生
GPT-4oは非常に高価
- GPT-4oを使ったスクレイピングはコストが高い
- HTML文字列から不要なデータを除去するクリーンアップロジックを追加してコストを削減
結論とデモ
- GPT-4oのデータ抽出品質には驚かされたが、コスト面では失望
- Streamlitを使った簡単なデモを提供
- さらなる実験により改善の余地が多い
GN⁺のまとめ
- この記事はAIを使ったWebスクレイピングの可能性と限界を探っている
- GPT-4oの構造化出力機能を活用し、複雑なテーブルデータを正確に抽出できることを示す
- コスト面の問題といくつかの技術的制約はあるが、AI支援Webスクレイピングツールの潜在力を確認できる
- 類似機能を提供する他のプロジェクトとしてはBeautifulSoup、Scrapyなどがある
1件のコメント
Hacker Newsの意見
HTMLをシンプルな形式(例: markdown)に変換してからLLMに渡す方法が成功していた
構造化されたコンテンツ(例: 項目リスト、簡単なテーブル)にはLLMは不要
投稿者が作業の99%を終えたのに、残り1%のためにollamaをダウンロードしてテストしなかったのは意外
ページのスクリーンショットを撮り、必要な部分を切り取ってGPTに渡す方法を使っている
OpenAIが最近Batch APIを発表した
HTMLの例を提示し、beautifulsoupのコードスニペットを求める方法が効果的だった
「html reducer」のようなものがあるのか気になる
GPT-4oで直接スクレイピングする代わりに、GPT-4oに簡単なWebスクレイパーのスクリプトを書かせることができる
KadoaでAI自動化Webスクレイピングに取り組んでいる
クラシック音楽のデータベースを構築中