ScrapegraphAI:LLMでウェブスクレイピングを強化する

ガイド, パイソン, スクレイピング, 9月27日-2024年5分で読める

Webスクレイピングは、単純なルールベースの抽出から、コンテキストを考慮したデータ抽出のための大規模言語モデル(LLM)に依存する、より高度なテクニックへと進化してきました。ScrapegraphAIは、この進化の最前線にあり、OpenAI、Gemini、そしてOllamaのようなローカルモデルのような強力なLLMを通してWebスクレイピングを可能にしています。このブログでは、ScrapegraphAIとは何か、どのように動作するのか、そしてプロキシを統合したウェブサイトからのデータスクレイピングの実例を紹介します。

何を学ぶのか?

このブログで取り上げるのは

  • ScrapegraphAIとは何か?
  • ウェブサイトをスクレイピングするScrapegraphAIの基本的な使い方
  • プロキシを統合してパフォーマンスを向上させる方法
  • OpenAIのGPT-4o-miniモデルを使って、ウェブサイトBooks to Scrapeから書籍データを抽出する実践例

ScrapegraphAIとは?

ScrapegraphAIは 、大規模な言語モデルを活用してウェブサイトから動的にデータを抽出する、堅牢なウェブスクレイピングフレームワーク(オープンソース)です。厳密なCSSセレクタやXPathに依存する従来のスクレイパーとは異なり、ScrapegraphAIは、動的なウェブページやPDFのようなファイルを含む幅広いソースから構造化されたデータを解釈し、抽出するためにLLMを使用します。ScrapegraphAIは、従来のスクレイピングツールに比べ、より柔軟でメンテナンスの少ないオプションを提供します。ScrapegraphAIの主な特徴は、ユーザーが抽出したいデータのスキーマを定義できることです。出力に構造化されたフォーマットを指定することができ、ScrapegraphAIは抽出されたデータをこのスキーマに合わせて調整します。

ScrapegraphAIの際立った特徴の一つは、LLMを柔軟に選択できることである:

  • GPT-3.5やGPT-4o-miniのようなOpenAIのGPTモデル
  • より具体的な使用例のためのジェミニ
  • 費用対効果の高いプライベート・スクレイピング・ソリューションにOllamaを採用したローカルモデル

主要なスクレイピング・パイプライン

ScrapegraphAIは、様々なニーズに対応するために、いくつかの標準的なスクレイピングパイプラインを提供しています。最も一般的なものは以下の通りです:

  • SmartScraperGraph:ユーザ・プロンプトと入力ソース(ウェブサイトまたはローカルファイル)のみを必要とするシングルページのスクレーパー。
  • SearchGraph:検索エンジンの上位 n 件の検索結果から情報を抽出する。
  • SpeechGraph:ページからデータをスクレイピングし、その結果から音声ファイルを生成する。
  • ScriptCreatorGraph:単一のページをスクレイピングし、将来の抽出のためのPythonスクリプトを生成します。
  • SmartScraperMultiGraph:1つのプロンプトとURLのリストを使って、複数のページからデータをスクレイピングする。
  • ScriptCreatorMultiGraph:前のものと似ていますが、マルチページスクレイピング用のPythonスクリプトを生成します。

次のセクションでは、SmartScraperGraphに焦点を当てる。SmartScraperGraphは、プロンプトとソースURLを提供するだけで、単一ページのスクレイピングを可能にする。

ScrapegraphAIの基本的な使い方

前提条件

続いて、いくつかの依存関係をインストールする必要がある。以下のコマンドを実行すればインストールできる:

pipinstallscrapegraphai openai python-dotenv
playwrightインストール
  • scrapegraphai:ScrapegraphAIのコアパッケージ。
  • openaiです:スクレイピングにはOpenAIのGPT-4o-miniモデルを使う。
  • python-dotenv: .env ファイルから API キーのような環境変数を安全にロードできるようにします。

これらをインストールしたら、OpenAIのAPI Keyを用意してください。認証情報を安全に保つために、.envファイルに保存してください:

OPENAI_APIKEY=your_openai_api_key

コード例書籍からデータをスクレイピングする

例えば、 Books to Scrapeに掲載されている全ての書籍の情報を抽出したいとしよう:

  • 書籍名
  • 価格
  • 空室状況
  • レビュー

以下は、ScrapegraphAIのSmartScraperGraph パイプラインを使用したコード例です:

import os
from dotenv import load_dotenv
from scrapegraphai.graphs import SmartScraperGraph

# Load the OpenAI API key from .env file
load_dotenv()
openai_key = os.getenv("OPENAI_APIKEY")

# Define configuration for the LLM
graph_config = {
   "llm": {
      "api_key": openai_key,
      "model": "openai/gpt-4o-mini",
   },
}

prompt = """
Extract all the books from this website including
- Book Name
- Price
- Availability 
- Reviews
"""

# Create the SmartScraperGraph instance
smart_scraper_graph = SmartScraperGraph(
   prompt=prompt,
   source="https://books.toscrape.com/",
   config=graph_config
)


if __name__ == '__main__':
   result = smart_scraper_graph.run()
   print(result)

コードの説明

  • LLMコンフィギュレーション:ScrapegraphAIがOpenAIの GPT-4o-ミニ モデルを作成するには、API キーを指定し、モデル名を指定します。
  • プロンプト:ユーザー定義のプロンプトは、各書籍の名前、価格、在庫状況、レビューなどの情報をウェブサイトから抽出するようAIに指示する。
  • ソースURL:スクレイピングしたいウェブサイトのURLを指定する。
  • スクレーパーの運転:について 実行() メソッドはスクレイピング処理を開始し、結果は辞書のリストとして出力される。

出力例

以下は、どのような出力になるかの例である:

{'Book Name': 'A Light in the Attic', 'Price': '£51.77', 'Availability': 'In stock', 'Reviews': 'NA'},
{'Book Name': 'Tipping the Velvet', 'Price': '£53.74', 'Availability': 'In stock', 'Reviews': 'NA'},
{'Book Name': 'Soumission', 'Price': '£50.10', 'Availability': 'In stock', 'Reviews': 'NA'},
{'Book Name': 'Sharp Objects', 'Price': '£47.82', 'Availability': 'In stock', 'Reviews': 'NA'},
# ... more books ...

ご覧のように、スクレーパーは各書籍の詳細を構造化されたフォーマットで取得し、データパイプラインで使用できるようにしています。

プロキシの統合

大規模なスクレイピングやスクレイピング対策が施されたウェブサイトを対象とする場合、IPバン、キャプチャ、レート制限を回避するためにプロキシの統合が不可欠になります。プロキシを使用することは、匿名性を提供するだけでなく、中断することなく大量のデータをスクレイピングできることを保証します。

住宅用プロキシは、実際の住宅用IPアドレスから送信されるため、検出やブロックが困難である。

レジデンシャル・プロキシはProxyScrapeは、ウェブスクレイピングのシナリオ、特にスクレイピング対策が厳しいウェブサイトをターゲットとする場合に最適です。弊社は様々な場所からのローテーションIPアドレスを提供し、お客様のリクエストがあたかも実際のユーザーからのものであるかのように見えることを保証します。これは、制限を回避し、禁止を回避し、必要なデータへの継続的なアクセスを確保するのに役立ちます。

それでは、プロキシがScrapegraphAIとどのように統合されているかを見てみよう:

from dotenv import load_dotenv
import os
from scrapegraphai.graphs import SmartScraperGraph

# Load the OpenAI API key from .env file
load_dotenv()
openai_key = os.getenv("OPENAI_APIKEY")

# Define the configuration with proxy integration
graph_config = {
   "llm": {
      "api_key": openai_key,
      "model": "openai/gpt-4o-mini",
   },
   "loader_kwargs": {
      "proxy": {
         "server": "rp.proxyscrape.com:6060",
         "username": "your_username",
         "password": "your_password",
      },
   },
}

prompt = """
Extract all the books from this website including
- Book Name
- Price
- Availability 
- Reviews
"""

# Create the SmartScraperGraph instance
smart_scraper_graph = SmartScraperGraph(
   prompt=prompt,
   source="https://books.toscrape.com/",
   config=graph_config
)

# Run the scraper and print the result
if __name__ == '__main__':
   result = smart_scraper_graph.run()
   print(result)

プロキシ統合の説明:

  • プロキシの設定:プロキシは loader_kwargs のキーを押します。 グラフ設定.ここで、プロキシサーバーのアドレス、ユーザー名、パスワードを定義します。
  • これにより、ScrapegraphAIによる全てのリクエストは、指定されたプロキシサーバーを経由するようになり、ターゲットウェブサイトの制限を回避したり、IP禁止を回避したりするのに役立ちます。

結論

このブログでは、大規模言語モデル(LLM)を使用してウェブサイトから構造化データをインテリジェントに抽出する最新のウェブスクレイピングツールであるScrapegraphAIのパワーを探った。SmartScraperGraphのような様々なスクレイピングパイプラインを含む主要な機能について説明し、OpenAIのGPT-4o-miniモデルを使用してウェブサイトから書籍データをスクレイピングする実践的な例を提供しました。

また、プロキシ、特にProxyScrape のレジデンシャル・プロキシを統合する方法を紹介した。プロキシは、匿名性を保ち、制限を迂回し、データアクセスを維持するために非常に重要である。

ProxyScrape の住宅用プロキシを統合することで、最も困難なウェブサイトであっても、ウェブスクレイピング活動をより効率的、安全、かつスケーラブルに行うことができます。