5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google ADKとBright Data MCPで「リアルタイムWeb検索AIエージェント」を構築してみた

Last updated at Posted at 2025-11-16

こんにちは。
最近「Web検索 × AIエージェント」という組み合わせに興味が出てきて、Googleが公開しているGoogle ADK(Agent Development Kit)を触ってみました。

ただ、Google ADK単体だと「外部ツール呼び出し」の部分が少し難しく、実用的なAIエージェントにするには、リアルタイムのWebデータを扱える仕組みが必要になります。

そこで今回は、Bright Data MCP Serverと組み合わせて、

Web検索 → ページ遷移 → テキスト抽出 → レポート生成まで自動で実行する WebリサーチAIエージェント
をPythonで構築したときの学習記録をまとめました。

この記事のゴール

  • Google ADK(Python版)の基本的な使い方が分かる
  • MCP Serverが何者なのか理解できる
  • Bright DataのスクレイピングツールをAI エージェントから呼び出せる
  • 「リアルタイムWeb検索AIエージェント」が手元で動く

Google ADKとは?(学習しながら理解した要点)

触ってみて分かったのですが、ADKは「RAG」「エージェント」「ワークフロー」の間くらいの立ち位置で、

  • 複数のサブエージェントを組み合わせた
  • マルチステップのAI処理を構築できる
    フレームワークという理解がしっくりきました。

特に強力なのが、「MCPツールをネイティブサポートしていること」です。

MCPを使うと、AIモデルが

  • Web検索
  • API呼び出し
  • スクレイピングブラウザ操作
  • 外部データベース参照
    といった、外部ツールと安全に連携できます。

Bright Data MCP Serverとは?

Bright Data MCP Serverは、Bright Dataのスクレイピング基盤をMCP経由で操作できるサーバです。
例えば、以下のようなツールが利用できます:

ツール できること
search_engine Google、Bing、YandexからSERP(検索結果ページ)をスクレイピング。
scraping_browser_navigate スクレイピング・ブラウザを新しいURLに移動する。
scraping_browser_get_text 現在のページのbody要素のテキストコンテンツを抽出
web_data_amazon_product Amazon商品の構造化データを高速取得
web_data_x_posts X(旧Twitter)の投稿から構造化データを取得する。
web_data_instagram_comment インスタグラムのコメントを構造化データとして取得する。
…など多数 合計30種類以上のツール

完全版はAppendixで記載しております。
これをGoogle ADKのエージェントから直接呼び出せるため、
今回の「リアルタイムWeb検索AI」の実装に非常に相性が良いです。

前提条件

  • Python 3.10+
  • Node.js v18+
  • GeminiのAPI Key (今回は無料のGemini Tierを使用)
  • Bright Dataのアカウント(無料枠あり)

プロジェクト構成

Google ADKは特定のディレクトリ構成を期待するので、以下のように作ります:

google_adk_mcp_agent/
  ├── .env
  ├── web_search_agent/
  │      ├── __init__.py
  │      └── agent.py
  └── .venv/

google_adk_mcp_agentの中に、web_search_agentというサブフォルダを作成します。
このサブフォルダには、エージェントのコアロジックが含まれ、以下の2つのファイルが必要です:

  • __init__.pyagent.pyからロジックをエクスポートします
  • agent.py: Google ADKエージェントの定義が含まれています

Step 1. 仮想環境と依存ライブラリの準備

mkdir google_adk_mcp_agent
cd google_adk_mcp_agent

python3 -m venv .venv
source .venv/bin/activate # macOSで仮想環境を有効

pip install google-adk python-dotenv

Step 2. Bright Data MCP Serverのセットアップ

まず、Bright Dataのアカウントを取得します。

  • 「アカウント設定」の画面でAPIキーを取得します
    • Screenshot 2025-11-16 at 10.20.57.png
  • 「Web Access」でブラウザ認証情報を取得します
    • Create API
      • Screenshot 2025-11-16 at 10.26.35.png
    • Web Unlocker APIを選んで、次へ
      • Screenshot 2025-11-16 at 10.26.57.png
    • 完成!
      • Screenshot 2025-11-16 at 10.27.14.png
    • 認証用のUsernameとPasswordを取得
      • Screenshot 2025-11-16 at 10.33.17.png

次に、Node.js環境にBright Data MCPサーバーをインストール:

npm install -g @brightdata/mcp

Step 3. APIキーを.envに設定

# Google ADKがVertex AIと統合するかどうかを決定します。Gemini APIを使用する場合は"False"に設定します。
GOOGLE_GENAI_USE_VERTEXAI="False" 
GOOGLE_API_KEY="あなたのGemini APIキー"

BRIGHT_DATA_API_TOKEN="あなたのBright Data API TOKEN" 
BRIGHT_DATA_BROWSER_AUTH="username:password"

Step4. エージェントを定義

今回構築するエージェントは、以下の3つのサブエージェントで動いています。

1. Planner(検索クエリ生成)

ユーザーが入力した質問やテーマを分析し、検索エンジンに入力するイメージのクエリへと分解します。

  • 抽象的な質問 → 具体的な検索クエリへ
  • 3〜5件のクエリを JSON で返す
  • 後続の Researcher がそのまま利用できる形式に整形する
    例:

Q:「AIエージェントの最新事例を教えて」

A: 「ai agents examples 2025」「multi agent systems」「autonomous agents real world case」など

# Define the functions for the creation of the required sub-agents
def create_planner_agent():
    return Agent(
        name="planner",
        model="gemini-2.0-flash",
        description="Breaks down user input into focused search queries for research purposes.",
        instruction="""
        You are a research planning assistant. Your task is to:
        1. Analyze the user"s input topic or question.
        2. Break it down into 3 to 5 focused and diverse search engine-like queries that collectively cover the topic.
        3. Return your output as a JSON object in the following format:

        {
            "queries": ["query1", "query2", "query3"]
        }

        IMPORTANT:
        - The queries should be phrased as if typed into a search engine.
        """,
        output_key="search_queries"
    )

2. Researcher(Web検索+スクレイピング)

Plannerが作ったクエリを使って実際にBright Data MCPを呼び出し、

  • search_engineでGoogle風検索
  • 上位URLを抽出
  • scraping_browser_navigateでページに移動
  • scraping_browser_get_textで本文抽出
    という「実行フェーズ」を担当する部分です。

Bright Data MCPを使うことで、

AIが本当に「ウェブを見る」→ テキストを抽出する → 要点化する
という、通常のLLMでは不可能な「リアルタイム性+ソース付き回答」を実現できます。

def create_researcher_agent(mcp_tools):
    return Agent(
        name="researcher",
        model="gemini-2.0-flash",
        description="Performs web searches and extracts key insights from web pages using the configured tools.",
        instruction="""
        You are a web research agent. Your task is to:
        1. Receive a list of search queries from the planner agent.
        2. For each search query, apply the `search_engine` tool to get Google search results.
        3. From the global results, select the top 3 most relevant URLs.
        4. Pass each URL to the `scraping_browser_navigate` tool.
        5. From each page, use the `scraping_browser_get_text` tool to extract the main page content.
        6. Analyze the extracted text and summarize the key insights in the following JSON format:
        [
            {
                "url": "https://example.com",
                "insights": [
                    "Main insight one",
                    "Main insight two"
                ]
            },
            ...
        ]

        IMPORTANT:
        - You are only allowed to use the following tools: `search_engine`, `scraping_browser_navigate`, and `scraping_browser_get_text`.
        """,
        tools=mcp_tools
    )

3. Publisher(レポート生成)

Researcherが返したJSONを受け取り、Markdown形式のレポートとして読みやすくまとめる部分です。

  • 章立て(#, ##, ###)による構造化
  • URL へのリンクも保持
  • 抽出結果をただ並べるのではなく、ストーリーとして整理
  • 最後に簡潔な結論を書く

これで「単なるスクレイピング結果」ではなく、「読めるレポート」として仕上げてくれます!

def create_publisher_agent():
    return Agent(
        name="publisher",
        model="gemini-2.0-flash",
        description="Synthesizes research findings into a comprehensive, well-structured final document.",
        instruction="""
        You are an expert writer. Your task is to take the structured research output from the scraper agent and craft a clear, insightful, and well-organized report.

        GUIDELINES:
        - Use proper Markdown-like structure: title (#), subtitle, introduction, chapters (##), subchapters (###), and conclusion (##).
        - Integrate contextual links (where needed) using the URLs from the output of the researcher agent.
        - Maintain a professional, objective, and informative tone.
        - Go beyond restating findings—synthesize the information, connect ideas, and present them as a coherent narrative.
        """
    )

Step5. Bright Data MCPの統合(MCP Integration)

前のステップでも触れましたが、今回のエージェント構成ではResearcherが、Bright Data Web MCP Serverが提供するツール群に依存しています。
具体的には:

  • search_engine(SERP検索)
  • scraping_browser_navigate(ブラウザ移動)
  • scraping_browser_get_text(ページ本文抽出)
    といったMCPツールが使われています。

これらのツールはBright Data MCP Serverを起動したときに提供されるもので、Google ADK側から利用できるようにするには、まず「MCP Toolsetをロード」する処理をコード内で実装する必要があります。

Google ADKでは、このMCP連携を非常にシンプルに扱えるようにMCPToolset.from_server()というメソッドが用意されています。(ありがたい!:relaxed:)

async def initialize_mcp_tools_async():
    print("Connecting to Bright Data MCP...")
    tools, exit_stack = await MCPToolset.from_server(
        connection_params=StdioServerParameters(
            command="npx",
            args=["-y", "@brightdata/mcp"],
            env={
                "API_TOKEN": BRIGHT_DATA_API_TOKEN,
                "BROWSER_AUTH": BRIGHT_DATA_BROWSER_AUTH,
            }
        )
    )
    print(f"MCP Toolset created successfully with {len(tools)} tools")
    tool_names = [tool.name for tool in tools]
    print(f"Available tools include: {', '.join(tool_names)}")

    print("MCP initialization complete!")

    return tools, exit_stack

def initialize_mcp_tools():
    """Synchronous wrapper to initialize MCP tools"""
    global _mcp_tools, _exit_stack
    if _mcp_tools is None:
        try:
            loop = asyncio.get_event_loop()
            if loop.is_running():
                # If there's already a running loop, we need a different approach
                # Create a new event loop in a thread
                import concurrent.futures
                
                def run_async():
                    new_loop = asyncio.new_event_loop()
                    asyncio.set_event_loop(new_loop)
                    try:
                        return new_loop.run_until_complete(initialize_mcp_tools_async())
                    finally:
                        new_loop.close()
                
                with concurrent.futures.ThreadPoolExecutor() as executor:
                    _mcp_tools, _exit_stack = executor.submit(run_async).result()
            else:
                _mcp_tools, _exit_stack = loop.run_until_complete(initialize_mcp_tools_async())
        except RuntimeError:
            # No event loop exists, create one
            _mcp_tools, _exit_stack = asyncio.run(initialize_mcp_tools_async())
    
    return _mcp_tools, _exit_stack

Step6. Root Agentを作成

  • ルートエージェントとは?
    簡単に言うと…

すべてのサブエージェントを束ねて、正しい順番で呼び出す親エージェント Google ADKの「実行エントリーポイント」である存在

だと私が理解しております。

Google ADK にはいくつかのエージェントタイプがあります:

  • 通常の Agent(単体エージェント)
  • ループ型 Agent
  • 条件分岐系 Agent
  • SequentialAgent(順番実行)
  • デバッグ用途の Agent
    など。

今回は 「Planner → Researcher → Publisher」 という複数のサブエージェントを順番に実行させたいケース では、SequentialAgentを使うのが最適でした。

def create_root_agent():
    try:
        # Load the MCP tools
        mcp_tools, exit_stack = initialize_mcp_tools()
    except Exception as e:
        print(f"Warning: Could not initialize MCP tools: {e}")
        mcp_tools = []
        exit_stack = None

    # Define an agent that applies the configured sub-agents sequentially
    root_agent = SequentialAgent(
        name="web_research_agent",
        description="An agent that researches topics on the web and creates comprehensive reports.",
        sub_agents=[
            create_planner_agent(),
            create_researcher_agent(mcp_tools),
            create_publisher_agent(),
        ]
    )

    return root_agent

コードのまとめ

agent.py
from dotenv import load_dotenv
import os
import asyncio
from google.adk.agents import Agent, SequentialAgent
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset, StdioServerParameters

# Load the environment variables from the .env file
load_dotenv()

# Read the envs for integration with the Bright Data Web MCP server
BRIGHT_DATA_API_TOKEN = os.getenv("BRIGHT_DATA_API_TOKEN")
BRIGHT_DATA_BROWSER_AUTH = os.getenv("BRIGHT_DATA_BROWSER_AUTH")

# Global variables for caching
_mcp_tools = None
_exit_stack = None

# Define the functions for the creation of the required sub-agents
def create_planner_agent():
    return Agent(
        name="planner",
        model="gemini-2.0-flash",
        description="Breaks down user input into focused search queries for research purposes.",
        instruction="""
        You are a research planning assistant. Your task is to:
        1. Analyze the user"s input topic or question.
        2. Break it down into 3 to 5 focused and diverse search engine-like queries that collectively cover the topic.
        3. Return your output as a JSON object in the following format:

        {
            "queries": ["query1", "query2", "query3"]
        }

        IMPORTANT:
        - The queries should be phrased as if typed into a search engine.
        """,
        output_key="search_queries"
    )

def create_researcher_agent(mcp_tools):
    return Agent(
        name="researcher",
        model="gemini-2.0-flash",
        description="Performs web searches and extracts key insights from web pages using the configured tools.",
        instruction="""
        You are a web research agent. Your task is to:
        1. Receive a list of search queries from the planner agent.
        2. For each search query, apply the `search_engine` tool to get Google search results.
        3. From the global results, select the top 3 most relevant URLs.
        4. Pass each URL to the `scraping_browser_navigate` tool.
        5. From each page, use the `scraping_browser_get_text` tool to extract the main page content.
        6. Analyze the extracted text and summarize the key insights in the following JSON format:
        [
            {
                "url": "https://brightdata.com/blog/ai/aws-strands-sdk-with-web-mcp",
                "insights": [
                    "Main insight one",
                    "Main insight two"
                ]
            },
            ...
        ]

        IMPORTANT:
        - You are only allowed to use the following tools: `search_engine`, `scraping_browser_navigate`, and `scraping_browser_get_text`.
        """,
        tools=mcp_tools
    )

def create_publisher_agent():
    return Agent(
        name="publisher",
        model="gemini-2.0-flash",
        description="Synthesizes research findings into a comprehensive, well-structured final document.",
        instruction="""
        You are an expert writer. Your task is to take the structured research output from the scraper agent and craft a clear, insightful, and well-organized report.

        GUIDELINES:
        - Use proper Markdown-like structure: title (#), subtitle, introduction, chapters (##), subchapters (###), and conclusion (##).
        - Integrate contextual links (where needed) using the URLs from the output of the researcher agent.
        - Maintain a professional, objective, and informative tone.
        - Go beyond restating findings—synthesize the information, connect ideas, and present them as a coherent narrative.
        """
    )

# To load the MCP tools exposed by the Bright Data Web MCP server
async def initialize_mcp_tools_async():
    print("Connecting to Bright Data MCP...")
    tools, exit_stack = await MCPToolset.from_server(
        connection_params=StdioServerParameters(
            command="npx",
            args=["-y", "@brightdata/mcp"],
            env={
                "API_TOKEN": BRIGHT_DATA_API_TOKEN,
                "BROWSER_AUTH": BRIGHT_DATA_BROWSER_AUTH,
            }
        )
    )
    print(f"MCP Toolset created successfully with {len(tools)} tools")
    tool_names = [tool.name for tool in tools]
    print(f"Available tools include: {', '.join(tool_names)}")

    print("MCP initialization complete!")

    return tools, exit_stack

def initialize_mcp_tools():
    """Synchronous wrapper to initialize MCP tools"""
    global _mcp_tools, _exit_stack
    if _mcp_tools is None:
        try:
            loop = asyncio.get_event_loop()
            if loop.is_running():
                # If there's already a running loop, we need a different approach
                # Create a new event loop in a thread
                import concurrent.futures
                
                def run_async():
                    new_loop = asyncio.new_event_loop()
                    asyncio.set_event_loop(new_loop)
                    try:
                        return new_loop.run_until_complete(initialize_mcp_tools_async())
                    finally:
                        new_loop.close()
                
                with concurrent.futures.ThreadPoolExecutor() as executor:
                    _mcp_tools, _exit_stack = executor.submit(run_async).result()
            else:
                _mcp_tools, _exit_stack = loop.run_until_complete(initialize_mcp_tools_async())
        except RuntimeError:
            # No event loop exists, create one
            _mcp_tools, _exit_stack = asyncio.run(initialize_mcp_tools_async())
    
    return _mcp_tools, _exit_stack

# Define the root agent required by Google ADK to start
def create_root_agent():
    try:
        # Load the MCP tools
        mcp_tools, exit_stack = initialize_mcp_tools()
    except Exception as e:
        print(f"Warning: Could not initialize MCP tools: {e}")
        mcp_tools = []
        exit_stack = None

    # Define an agent that applies the configured sub-agents sequentially
    root_agent = SequentialAgent(
        name="web_research_agent",
        description="An agent that researches topics on the web and creates comprehensive reports.",
        sub_agents=[
            create_planner_agent(),
            create_researcher_agent(mcp_tools),
            create_publisher_agent(),
        ]
    )

    return root_agent

# Google ADK will load the root agent in the web UI or CLI
try:
    root_agent = create_root_agent()
except Exception as e:
    print(f"Error creating root agent: {e}")
    # Create a minimal agent that can still be loaded
    root_agent = Agent(
        name="web_research_agent",
        model="gemini-2.0-flash",
        description="Web research agent (fallback mode)",
        instruction="This is a fallback agent."
    )
__init__.py
from . import agent
from .agent import root_agent
__all__ = ['root_agent', 'agent']

Step7. 実行

プロジェクトのrootフォルダで、仮想環境を有効した上、 Web UIでエージェントを起動します:

adk web

Screenshot 2025-11-16 at 11.22.50.png

http://127.0.0.1:8000を開くとADK Web UIが起動します。

「2025年のローマ法王について調べて」と入力すると、「クエリを分解して → search_engine でリアルタイム検索して要点を整理 → レポートでまとめる」という処理を自動で実行してくれました!👏
Screenshot 2025-11-16 at 11.24.46.png
Screenshot 2025-11-16 at 11.27.30.png

まとめ

今回の学習で感じたこと:

  • Google ADKは思った以上にフレームワークしている
  • MCP統合により実用的な外部ツール呼び出しが手軽
  • Bright Data MCPのツールはAIエージェントと相性が良い
  • 「AIが外部世界と対話する」仕組みとしてかなり実践的になる
    特に、「リアルタイム検索AI」がここまで簡単に作れるとは思いませんでした。

引き続き、

  • 社内ナレッジRAG × リアルタイム検索
  • データ分析レポートの自動作成
  • スクレイピングワーカーの自律化
    などにも応用してみたいと思います!

おわりに

この記事が、Google ADKとMCP Serverを触ってみたい方の参考になれば嬉しいです。
修正点やより良い構成案があれば、ぜひコメントで教えてください!

Appendix

Bright Data MCP Serverで利用可能なツール

Screenshot 2025-11-16 at 1.10.25.png

機能 説明
search_engine Google、Bing、YandexからSERP(検索結果ページ)をスクレイピング。Googleの結果はJSON形式、Bing/YandexはMarkdown形式で返却。cursorパラメータでページネーション対応。
scrape_as_markdown 単一ページを高度な抽出機能でスクレイピングし、Markdown形式で返却。Bright DataのUnlocker機能を使用し、Bot保護やCAPTCHAを自動処理。
search_engine_batch 最大10件の検索クエリを並列実行。Googleの結果はJSON、Bing/YandexはMarkdown形式で返却。
scrape_batch 最大10件のWebページを一括スクレイピングし、URL/コンテンツのペアを配列でMarkdown形式返却。
scrape_as_html 単一ページを高度な抽出機能でスクレイピングし、HTML応答本体を返却。Bot検出やCAPTCHA保護されたサイトに対応。
extract WebページをMarkdownとしてスクレイピングし、AIサンプリングで構造化JSONに変換。カスタム抽出プロンプトをオプションで指定可能。
session_stats 現在のMCPセッション中に各ツールが呼び出された回数をレポート。
web_data_amazon_product Amazon商品の構造化データを高速取得。/dp/を含む有効な商品URLが必要。通常のスクレイピングより高速かつ安定。
web_data_amazon_product_reviews Amazon商品レビューの構造化データを高速取得。/dp/を含む有効な商品URLが必要。通常のスクレイピングより高速かつ安定。
web_data_amazon_product_search Amazon検索結果の構造化データを取得。検索キーワードとAmazonドメインURLが必要。検索結果の最初のページのみ対応。
web_data_walmart_product Walmart商品の構造化データを高速取得。/ip/を含む商品URLが必要。通常のスクレイピングより高速かつ安定。
web_data_walmart_seller Walmart出品者の構造化データを高速取得。有効なWalmart出品者URLが必要。通常のスクレイピングより高速かつ安定。
web_data_ebay_product eBay商品の構造化データを高速取得。有効なeBay商品URLが必要。通常のスクレイピングより高速かつ安定。
web_data_homedepot_products Home Depot商品の構造化データを高速取得。有効なhomedepot.com商品URLが必要。通常のスクレイピングより高速かつ安定。
web_data_zara_products Zara商品の構造化データを高速取得。有効なZara商品URLが必要。通常のスクレイピングより高速かつ安定。
web_data_etsy_products Etsy商品の構造化データを高速取得。有効なEtsy商品URLが必要。通常のスクレイピングより高速かつ安定。
web_data_bestbuy_products Best Buy商品の構造化データを高速取得。有効なBest Buy商品URLが必要。通常のスクレイピングより高速かつ安定。
web_data_linkedin_person_profile LinkedIn個人プロフィールの構造化データを高速取得。有効なLinkedInプロフィールURLが必要。通常のスクレイピングより高速かつ安定。
web_data_linkedin_company_profile LinkedIn企業プロフィールの構造化データを高速取得。有効なLinkedIn企業URLが必要。通常のスクレイピングより高速かつ安定。
web_data_linkedin_job_listings LinkedIn求人情報の構造化データを高速取得。有効なLinkedIn求人URLまたは検索URLが必要。通常のスクレイピングより高速かつ安定。
web_data_linkedin_posts LinkedInの投稿の構造化データを高速取得。有効なLinkedIn投稿URLが必要。通常のスクレイピングより高速かつ安定。
web_data_linkedin_people_search LinkedInの人物検索結果の構造化データを高速取得。LinkedIn人物検索URLが必要。通常のスクレイピングより高速かつ安定。
web_data_crunchbase_company Crunchbase企業情報の構造化データを高速取得。有効なCrunchbase企業URLが必要。通常のスクレイピングより高速かつ安定。
web_data_zoominfo_company_profile ZoomInfo企業プロフィールの構造化データを高速取得。有効なZoomInfo企業URLが必要。通常のスクレイピングより高速かつ安定。
web_data_instagram_profiles Instagramプロフィールの構造化データを高速取得。有効なInstagramプロフィールURLが必要。通常のスクレイピングより高速かつ安定。
web_data_instagram_posts Instagram投稿の構造化データを高速取得。有効なInstagram投稿URLが必要。通常のスクレイピングより高速かつ安定。
web_data_instagram_reels Instagramリールの構造化データを高速取得。有効なInstagramリールURLが必要。通常のスクレイピングより高速かつ安定。
web_data_instagram_comments Instagramコメントの構造化データを高速取得。有効なInstagram URLが必要。通常のスクレイピングより高速かつ安定。
web_data_facebook_posts Facebook投稿の構造化データを高速取得。有効なFacebook投稿URLが必要。通常のスクレイピングより高速かつ安定。
web_data_facebook_marketplace_listings Facebookマーケットプレイス出品情報の構造化データを高速取得。有効なマーケットプレイス出品URLが必要。通常のスクレイピングより高速かつ安定。
web_data_facebook_company_reviews Facebook企業レビューの構造化データを高速取得。有効なFacebook企業URLとレビュー件数が必要。通常のスクレイピングより高速かつ安定。
web_data_facebook_events Facebookイベント情報の構造化データを高速取得。有効なFacebookイベントURLが必要。通常のスクレイピングより高速かつ安定。
web_data_tiktok_profiles TikTokプロフィールの構造化データを高速取得。有効なTikTokプロフィールURLが必要。通常のスクレイピングより高速かつ安定。
web_data_tiktok_posts TikTok投稿の構造化データを高速取得。有効なTikTok投稿URLが必要。通常のスクレイピングより高速かつ安定。
web_data_tiktok_shop TikTok Shop商品の構造化データを高速取得。有効なTikTok Shop商品URLが必要。通常のスクレイピングより高速かつ安定。
web_data_tiktok_comments TikTokコメントの構造化データを高速取得。有効なTikTok動画URLが必要。通常のスクレイピングより高速かつ安定。
web_data_google_maps_reviews GoogleマップレビューN構造化データを高速取得。有効なGoogleマップURLが必要で、days_limit(デフォルト3日)をオプション指定可能。通常のスクレイピングより高速かつ安定。
web_data_google_shopping Google Shopping商品の構造化データを高速取得。有効なGoogle Shopping商品URLが必要。通常のスクレイピングより高速かつ安定。
web_data_google_play_store Google Play Storeアプリの構造化データを高速取得。有効なPlay StoreアプリURLが必要。通常のスクレイピングより高速かつ安定。
web_data_apple_app_store Apple App Storeアプリの構造化データを高速取得。有効なApp StoreアプリURLが必要。通常のスクレイピングより高速かつ安定。
web_data_reuter_news Reutersニュース記事の構造化データを高速取得。有効なReutersニュース記事URLが必要。通常のスクレイピングより高速かつ安定。
web_data_github_repository_file GitHubリポジトリファイルの構造化データを高速取得。有効なGitHubファイルURLが必要。通常のスクレイピングより高速かつ安定。
web_data_yahoo_finance_business Yahoo Finance企業プロフィールの構造化データを高速取得。有効なYahoo Finance企業URLが必要。通常のスクレイピングより高速かつ安定。
web_data_x_posts X(旧Twitter)投稿の構造化データを高速取得。有効なX投稿URLが必要。通常のスクレイピングより高速かつ安定。
web_data_zillow_properties_listing Zillow不動産物件情報の構造化データを高速取得。有効なZillow物件URLが必要。通常のスクレイピングより高速かつ安定。
web_data_booking_hotel_listings Booking.comホテル情報の構造化データを高速取得。有効なBooking.com物件URLが必要。通常のスクレイピングより高速かつ安定。
web_data_youtube_profiles YouTubeチャンネルプロフィールの構造化データを高速取得。有効なYouTubeチャンネルURLが必要。通常のスクレイピングより高速かつ安定。
web_data_youtube_comments YouTubeコメントの構造化データを高速取得。有効なYouTube動画URLが必要で、num_of_comments(デフォルト10件)をオプション指定可能。通常のスクレイピングより高速かつ安定。
web_data_reddit_posts Reddit投稿の構造化データを高速取得。有効なReddit投稿URLが必要。通常のスクレイピングより高速かつ安定。
web_data_youtube_videos YouTube動画メタデータの構造化データを高速取得。有効なYouTube動画URLが必要。通常のスクレイピングより高速かつ安定。
scraping_browser_navigate スクレイピングブラウザセッションを開くまたは再利用し、指定URLにナビゲート。ネットワークリクエストの追跡をリセット。
scraping_browser_go_back アクティブなスクレイピングブラウザセッションを前のページに戻し、新しいURLとタイトルを報告。
scraping_browser_go_forward アクティブなスクレイピングブラウザセッションを次のページに進め、新しいURLとタイトルを報告。
scraping_browser_snapshot 現在のページのARIAスナップショットをキャプチャし、インタラクティブ要素とそのref(参照ID)をリスト化。後続のref操作で使用。
scraping_browser_click_ref 最新のARIAスナップショットから取得したrefを使用して要素をクリック。refと人間が読める要素の説明が必要。
scraping_browser_type_ref ARIAスナップショットで特定されたrefの要素にテキストを入力。入力後にEnterキーを押して送信するオプションあり。
scraping_browser_screenshot 現在のページのスクリーンショットをキャプチャ。full_pageオプションでページ全体の画像取得に対応。
scraping_browser_network_requests ページ読み込み以降に記録されたネットワークリクエストをHTTPメソッド、URL、レスポンスステータスとともにリスト化。デバッグ用。
scraping_browser_wait_for_ref ARIA refで特定された要素が表示されるまで待機。タイムアウト(ミリ秒)をオプション指定可能。
scraping_browser_get_text 現在のページのbody要素のテキストコンテンツを返却。
scraping_browser_get_html 現在のページのHTMLコンテンツを返却。headやscriptタグが必要な場合を除き、full_pageオプションは使用を避ける。
scraping_browser_scroll スクレイピングブラウザセッションで現在のページの最下部までスクロール。
scraping_browser_scroll_to_ref ARIAスナップショットで参照された要素が表示されるまでページをスクロール。

参考文献

  1. github: brightdata-mcp
  2. github: adk-python
  3. AIエージェント開発のためのGoogle ADKとMCPサーバーの統合
5
2
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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?