Webスクレイピングは、単純なルールベースの抽出から、コンテキストを考慮したデータ抽出のための大規模言語モデル(LLM)に依存する、より高度なテクニックへと進化してきました。ScrapegraphAIは、この進化の最前線にあり、OpenAI、Gemini、そしてOllamaのようなローカルモデルのような強力なLLMを通してWebスクレイピングを可能にしています。このブログでは、ScrapegraphAIとは何か、どのように動作するのか、そしてプロキシを統合したウェブサイトからのデータスクレイピングの実例を紹介します。
このブログで取り上げるのは
ScrapegraphAIは 、大規模な言語モデルを活用してウェブサイトから動的にデータを抽出する、堅牢なウェブスクレイピングフレームワーク(オープンソース)です。厳密なCSSセレクタやXPathに依存する従来のスクレイパーとは異なり、ScrapegraphAIは、動的なウェブページやPDFのようなファイルを含む幅広いソースから構造化されたデータを解釈し、抽出するためにLLMを使用します。ScrapegraphAIは、従来のスクレイピングツールに比べ、より柔軟でメンテナンスの少ないオプションを提供します。ScrapegraphAIの主な特徴は、ユーザーが抽出したいデータのスキーマを定義できることです。出力に構造化されたフォーマットを指定することができ、ScrapegraphAIは抽出されたデータをこのスキーマに合わせて調整します。
ScrapegraphAIの際立った特徴の一つは、LLMを柔軟に選択できることである:
ScrapegraphAIは、様々なニーズに対応するために、いくつかの標準的なスクレイピングパイプラインを提供しています。最も一般的なものは以下の通りです:
次のセクションでは、SmartScraperGraphに焦点を当てる。SmartScraperGraphは、プロンプトとソースURLを提供するだけで、単一ページのスクレイピングを可能にする。
続いて、いくつかの依存関係をインストールする必要がある。以下のコマンドを実行すればインストールできる:
pipinstallscrapegraphai openai python-dotenv
playwrightインストール
これらをインストールしたら、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)
GPT-4o-ミニ
モデルを作成するには、API キーを指定し、モデル名を指定します。実行()
メソッドはスクレイピング処理を開始し、結果は辞書のリストとして出力される。以下は、どのような出力になるかの例である:
{'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
のキーを押します。 グラフ設定
.ここで、プロキシサーバーのアドレス、ユーザー名、パスワードを定義します。このブログでは、大規模言語モデル(LLM)を使用してウェブサイトから構造化データをインテリジェントに抽出する最新のウェブスクレイピングツールであるScrapegraphAIのパワーを探った。SmartScraperGraphのような様々なスクレイピングパイプラインを含む主要な機能について説明し、OpenAIのGPT-4o-miniモデルを使用してウェブサイトから書籍データをスクレイピングする実践的な例を提供しました。
また、プロキシ、特にProxyScrape のレジデンシャル・プロキシを統合する方法を紹介した。プロキシは、匿名性を保ち、制限を迂回し、データアクセスを維持するために非常に重要である。
ProxyScrape の住宅用プロキシを統合することで、最も困難なウェブサイトであっても、ウェブスクレイピング活動をより効率的、安全、かつスケーラブルに行うことができます。