以下の内容はhttps://error-daizenn.hatenablog.com/entry/2025/06/19/144623より取得しました。


BrightDataとGoogle Geminiで作る次世代Webスクレイパー(スクレイピング)構築法【Python完全ガイド】


2025年6月現在、Webデータの取得とAIによるリアルタイム解析を組み合わせた「インテリジェントスクレイピング」が注目を集めています。その中でも、BrightDataのプロキシネットワークとGoogle Geminiの自然言語処理を連携させた構成は、強力かつ柔軟なソリューションとして高い関心を集めています。

本記事では、PythonでBrightDataとGemini APIを統合し、Amazon商品・ベストセラー・LinkedInプロファイルを対象に、高度なAI対応スクレイパーを構築する方法をステップごとに解説します。

プロジェクト構成と使用技術の全体像

今回の構成では、以下のライブラリとAPIを使用してスクレイパーを構築します:

・BrightData Web Scraper API
・Google Gemini LLM(gemini-2.0-flash)
・LangChainおよびLangGraphによるエージェント構成
・Pythonの標準ライブラリ:os、json、typing

この組み合わせにより、プロキシ経由のスクレイピングとAIによるクエリ解析・要約・エージェント実行を一括して実装可能となります。

特に自然言語ベースでスクレイピングを制御できる点は、従来のコードベースのクローラーとは一線を画す進化です。

必要ライブラリのインストール

以下のコマンドで必要なパッケージを一括インストールします:

!pip install langchain-brightdata langchain-google-genai langgraph langchain-core google-generativeai

これにより、BrightData API・Gemini連携・LangGraphエージェント構築など、すべての基本機能が揃います。事前に仮想環境を作成しておくと環境が汚れず便利です。

一行のコマンドでセットアップできる点も、エンジニアにとって実用的な魅力です。

基本インポートとAPI初期化

次に、Pythonファイルの冒頭で必要なインポートを定義します:

import os
import json
from typing import Dict, Any, Optional
from langchain_brightdata import BrightDataWebScraperAPI
from langchain_google_genai import ChatGoogleGenerativeAI
from langgraph.prebuilt import create_react_agent

ここではBrightData APIクラス・Geminiチャットクラス・Reactスタイルのエージェント生成器を含めています。

この段階で、スクレイピングとAIの両軸を制御する下地が整います。

BrightDataScraperクラスの構築

以下に、BrightDataとGeminiを統合するクラス構造を定義します:

class BrightDataScraper:
    def __init__(self, api_key: str, google_api_key: Optional[str] = None):
        self.api_key = api_key
        self.scraper = BrightDataWebScraperAPI(bright_data_api_key=api_key)

        if google_api_key:
            self.llm = ChatGoogleGenerativeAI(
                model="gemini-2.0-flash",
                google_api_key=google_api_key
            )
            self.agent = create_react_agent(self.llm, [self.scraper])

このクラスでは、BrightData用APIとGeminiエージェントの初期化を統合しています。Google APIキーが与えられていない場合、AIエージェント機能はスキップされます。

初期化時に明示的に切り分けることで、Gemini不使用モードにも対応可能です。

Amazon・LinkedIn・自然言語クエリ処理の実装

以下のメソッドにより、具体的なデータ抽出処理を構築できます:

def scrape_amazon_product(self, url: str, zipcode: str = "10001") -> Dict[str, Any]:
    try:
        results = self.scraper.invoke({
            "url": url,
            "dataset_type": "amazon_product",
            "zipcode": zipcode
        })
        return {"success": True, "data": results}
    except Exception as e:
        return {"success": False, "error": str(e)}

同様に、ベストセラー抽出・LinkedInプロファイル抽出もメソッド化されており、AIによる自然言語クエリのストリーミング処理も以下のように簡潔に書けます:

def run_agent_query(self, query: str) -> None:
    if not hasattr(self, 'agent'):
        print("Error: Google API key required for agent functionality")
        return

    try:
        for step in self.agent.stream(
            {"messages": query},
            stream_mode="values"
        ):
            step["messages"][-1].pretty_print()
    except Exception as e:
        print(f"Agent error: {e}")

LLMを介した“自然言語スクレイピング指示”は、コードを知らないユーザーにとって革命的です。

実行統合:main関数による動作フロー

構築したクラスを実際に運用するには、以下のようなmain関数を作成し、機能を順に実行します:

def main():
    BRIGHT_DATA_API_KEY = "Use Your Own API Key"
    GOOGLE_API_KEY = "Use Your Own API Key"

    scraper = BrightDataScraper(BRIGHT_DATA_API_KEY, GOOGLE_API_KEY)

    print("🛍️ Scraping Amazon India Bestsellers...")
    bestsellers = scraper.scrape_amazon_bestsellers("in")
    scraper.print_results(bestsellers, "Amazon India Bestsellers")

    print("📦 Scraping Amazon Product...")
    product_url = "https://www.amazon.com/dp/B08L5TNJHG"
    product_data = scraper.scrape_amazon_product(product_url, "10001")
    scraper.print_results(product_data, "Amazon Product Data")

    print("👤 Scraping LinkedIn Profile...")
    linkedin_url = "https://www.linkedin.com/in/satyanadella/"
    linkedin_data = scraper.scrape_linkedin_profile(linkedin_url)
    scraper.print_results(linkedin_data, "LinkedIn Profile Data")

    print("🤖 Running AI Agent Query...")
    agent_query = """
    Scrape Amazon product data for https://www.amazon.com/dp/B0D2Q9397Y?th=1
    in New York (zipcode 10001) and summarize the key product details.
    """
    scraper.run_agent_query(agent_query)

この関数により、各処理が明示的に制御され、機能テスト・デモ用途・本番利用すべてに適応できます。

サポート関数:出力の整形表示

出力結果の整形には、以下のような簡潔な表示関数を活用できます:

def print_results(self, results: Dict[str, Any], title: str = "Results") -> None:
    print(f"\n{'='*50}")
    print(f"{title}")
    print(f"{'='*50}")
    if results["success"]:
        print(json.dumps(results["data"], indent=2, ensure_ascii=False))
    else:
        print(f"Error: {results['error']}")
    print()

JSON出力を見やすく整形することで、APIレスポンスの構造確認やログ記録が容易になります。

処理成功・失敗を分岐して明示表示することは、実装品質向上にも直結します。

起動処理とパッケージインストールの自動化

スクリプト単体でも実行できるように、以下のようなエントリーポイントを付け加えます:

if __name__ == "__main__":
    print("Installing required packages...")
    os.system("pip install -q langchain-brightdata langchain-google-genai langgraph")

    os.environ["BRIGHT_DATA_API_KEY"] = "Use Your Own API Key"

    main()

パッケージが未導入の環境でも自動的にインストールが行われ、main関数に制御が移る構造です。

この仕組みにより、コード単体での移植性と即時実行性が大きく向上します。

ユースケース:どんな場面で使えるのか?

このBrightData × Gemini連携型スクレイパーは、以下のような多様なビジネス・技術シーンで応用可能です:

・Amazon市場調査(価格変動・レビュー動向)
・LinkedIn採用リサーチ(職務経歴や学歴の抽出)
・ベストセラー商品の比較分析とトレンド抽出
・自然言語クエリで社内の非エンジニアが自動収集可能
・他のLLMやScraperAPIと組み合わせた拡張構成

構造化データと自然言語処理の融合により、スクレイピングの定義そのものを一段進化させる可能性を秘めています。

注意点と運用上のセキュリティ配慮

この種の構成を運用する際には、以下の注意事項を遵守することが求められます:

・BrightData利用時はAPIレート制限と契約ポリシーを遵守
・AmazonやLinkedInの規約違反にならないように対象を限定
・Google Gemini APIキーは外部漏洩しないよう環境変数で管理
・LLMによるデータ解釈には誤差が含まれる可能性がある
・大規模データ取得時はキャッシュやリトライ処理を実装

実運用を意識した“責任あるスクレイピング構成”が、長期的活用の鍵となります。

まとめ:AI時代のWebスクレイピングの新常識

従来、Webスクレイピングは静的HTMLの構文解析やXPath・正規表現に頼る技術でした。しかし2025年現在、BrightDataの高精度なネットワーク抽出と、Google Geminiの自然言語処理を組み合わせることで、スクレイピングは“対話的・自律的・拡張的”な手法へと進化を遂げています。

本記事の構成をもとに、あなた自身の業務や分析に合わせたスクレイピングAIを設計し、効率化と競争力を手に入れてください。




以上の内容はhttps://error-daizenn.hatenablog.com/entry/2025/06/19/144623より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14