---
title: "Bright Data Python SDKの紹介:ウェブデータのスクレイピング、検索、取得"
slug: bright-data-python-sdk
date: 2026-10-18T12:36:39+00:00
modified: 2026-10-18T12:36:41+00:00
permalink: https://brightdata.jp/blog/ai/bright-data-python-sdk
type: blog
---

[ ブログ ](https://brightdata.jp/blog "ブログ") / [AI](https://brightdata.jp/blog/ai)







 [AI](https://brightdata.jp/blog/ai)

# Bright Data Python SDKの紹介:ウェブデータのスクレイピング、検索、取得

Bright Data Python SDKを使って、ウェブサイトのスクレイピング、GoogleやBingの検索、データのエクスポート、Pythonでのジョブの同時実行を行う方法を学びます。

 8 分読





 [ ![Antonello Zanini](https://media.brightdata.jp/2022/12/Antonello-Zanini-2-50x50.jpg) ](https://brightdata.com/blog/authors/antonello-zanini)

 [Antonello Zanini

Technical Writer

 ](https://brightdata.com/blog/authors/antonello-zanini)





 ![Bright Data Python SDK](https://media.brightdata.jp/2026/10/Bright-Data-Python-SDK.png)





このガイドでは、以下の内容を学びます:

- Bright Data Python SDKとは何か。
- 認証の仕組みを含め、内部でどのように動作するか。
- 同期・非同期モード、主な機能、メソッドなど、何が提供されているか。
- SDKをインストールし、最初のリクエストをステップバイステップで実行する方法。
- ポーリング、同時スクレイピングなどの高度なトピック。
- 検索エンジン結果の比較から、手動データ抽出のためのBeautifulSoupによるウェブページのパースまで、実際のユースケース。

さっそく始めましょう!

## Bright Data Python SDKとは?

[Bright Data Python SDK](https://docs.brightdata.com/api-reference/SDK)は、[Bright Dataの製品](/products)とのやり取りを簡素化するために設計されたPythonライブラリです。

このSDKはPyPIの[`brightdata-sdk`](https://pypi.org/project/brightdata-sdk/)パッケージから利用できます。ウェブサイトのスクレイピング、検索エンジン結果の取得、既成のデータセットへのアクセス、Bright Dataソリューションとの連携を行うための統一インターフェースを提供します。

詳しく言うと、このPython SDKには100以上の[Bright Data Scraper API](/products/web-scraper)との統合がすぐに利用できる形で含まれており、Amazon、LinkedIn、Instagram、TikTokなど、さまざまなプラットフォームから最新の構造化された公開データにアクセスできます。

**注**:ターミナルでの作業を好む場合、[Bright Data CLI](https://docs.brightdata.com/products/cli/overview)を使えばコマンドラインから同様の機能の多くを利用できます。[AIエージェントとともにBright Data CLIを使う方法](/blog/ai/bright-data-cli-with-top-coding-agents)も学べます。

**参考資料**:

- [*Bright Data Python SDKのドキュメント*](https://docs.brightdata.com/api-reference/SDK)
- [*Bright Data Python SDKの公式リポジトリ*](https://github.com/brightdata/sdk-python)

## Python SDKの仕組み

内部では、このSDKはBright Data APIをPythonクラスでラップしています。そのため、HTTPリクエストを手動で構築したり、APIエンドポイントを呼び出したり、レスポンスをパースしたりすることなく、Bright Dataのサービスとやり取りできます。代わりに、開発者に優しいPythonメソッドを呼び出すだけで済みます。

このライブラリは完全に型付けされ、入念にドキュメント化されているため、IDE上で機能を探索しやすくなっています。

![IDEの自動補完、使用例の提案、メソッドドキュメントに注目](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791816660506_image.png)自動補完、型ヒント、使用例が提供されるため、利用可能なパラメータや各メソッドの使い方を理解しやすくなります。返されるオブジェクトも型付けされているため、レスポンスのフィールドに簡単にアクセスできます。

認証は[Bright Data APIトークン](https://docs.brightdata.com/api-reference/authentication#how-do-i-generate-a-new-api-key)、または既にBright Data CLIで認証済みの場合は[`brightdata login`](https://docs.brightdata.com/products/cli/commands#brightdata-login)によって保存された認証情報を通じて行われます。なお、Bright Dataアカウントに、SDKが内部で呼び出す必要なAPIが存在しない場合、ライブラリが自動的にそれらを設定します。

## SDKが提供するもの

基本的な仕組みが明確になったところで、次はPython SDKが提供する機能を探っていきましょう。

### 主な機能

Bright Data Python SDKは、以下を含む幅広い機能を網羅しています:

- **ウェブスクレイピング**:単一または複数のURLを同時にスクレイピングし、最小限のコードでウェブサイトのコンテンツを取得できます。
- **検索エンジンの結果**:Google、Bing、Yandexから結果を取得でき、地域指定クエリやバッチ検索にも対応しています。
- **プラットフォーム固有のスクレイパー**:Amazon、LinkedIn、Instagram、Facebook、TikTok、YouTube、Reddit、Pinterest、ChatGPT、Perplexity、その他のプラットフォームから構造化データを抽出します。
- **プラットフォーム固有の検索**:URLだけでなく検索パラメータを使って、プロフィール、求人、投稿、その他のコンテンツを見つけます。
- [**Scraper Studioとの統合**](https://docs.brightdata.com/products/scraper-studio/overview):カスタムスクレイパーを実行し、収集ジョブをトリガーし、ステータスを監視して結果を取得します。
- **型付きメソッドとレスポンス**:型ヒント、IDEの自動補完、パラメータの提案、構造化されたレスポンスオブジェクトにより、開発が容易になります。
- **アカウントとAPIの管理**:接続性を確認し、アカウント情報と使用状況を調べ、APIを一覧表示し、API設定を管理します。
- **データのエクスポート**:収集したウェブデータセットの結果をJSON、CSV、またはJSONL形式で保存します。

### 主なSDKメソッド

まずBright Data Python SDKをインストールします:

```none
pip install brightdata-sdk
```

インストール後、SDKをインポートすれば、以下のような多くのメソッドにアクセスできるようになります:

**メソッド****機能****Bright Dataの製品**`client.scrape_url(url)`1つのURLまたはURLのリストのコンテンツを取得し、[あらゆる対ボットシステムを回避します](https://docs.brightdata.com/concepts/how-bright-data-handles-blocking)[Unlocker API](/products/web-unlocker)`client.search.google(query=...)`Google検索を実行し、パース済みのオーガニック検索結果を返します[SERP API](/products/serp-api)`client.search.bing(query=...)`Bing検索を実行し、パース済みのオーガニック検索結果を返しますSERP API([Bing Web Search APIからの移行ガイド](https://docs.brightdata.com/products/serp-api/parsed-json-results/bing-to-bright-data-serp-migration-guide)を参照)`client.scrape.<platform>.<method>(url=...)`対象のプラットフォームから構造化データを抽出します(例:`client.scrape.amazon.products`)Scraper API`client.search.linkedin.jobs(...)`URLではなくパラメータでプラットフォームを検索します特定のScraper API`client.datasets.<name>(filter=...)`事前収集済みデータセットからフィルタされたスナップショットをリクエストします[Dataset API](https://docs.brightdata.com/api-reference/marketplace-dataset-api/filter-dataset)`client.scraper_studio.run(collector=..., input=...)`カスタムウェブスクレイピングコレクターをトリガーし、そのレコードを返します[Scraper Studio](/products/web-scraper/studio)`client.browser.get_connect_url()`PlaywrightまたはPuppeteerをクラウドブラウザに接続するためのCDPエンドポイントを構築します[Browser API](/products/scraping-browser)`client.list_zones()`アカウントで利用可能なゾーンを一覧表示しますなし### 同期クライアントと非同期クライアント

このSDKは、同じメソッド名ながら実行モデルが異なる2種類のクライアントを提供します:

- `BrightDataClient`:非同期クライアント。`asyncio`を使用し、高い同時実行性のワークロードを処理する必要があるアプリケーション向けに設計されています。
- `SyncBrightDataClient`:同期クライアント。シンプルなスクリプトや、直感的な逐次リクエストに最適です。

`SyncBrightDataClient`を使って`scrape_url()`を呼び出す方法は以下の通りです:

```none
from brightdata import SyncBrightDataClient

with SyncBrightDataClient() as client:
    result = client.scrape_url("https://example.com")
    print(result.data)
```

これと同等のことを`BrightDataClient`で行う場合、クライアントの管理に[`async with`、非同期メソッドの呼び出しに`await`](https://docs.python.org/3/howto/a-conceptual-overview-of-asyncio.html)を使用する必要があります:

```none
import asyncio
from brightdata import BrightDataClient

async def main():
    async with BrightDataClient() as client:
        result = await client.scrape_url("https://example.com")
        print(result.data)

asyncio.run(main())
```

どちらの例も、対象ページのHTMLを`result.data`に返します:

![対象のexample.comページのHTML](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791817848730_image.png)なお、`BrightDataClient`は非同期ですが、`scrape_url()`はデフォルトで`mode="sync"`を使用します。これは、スクレイピング結果が利用可能になるまで呼び出しが待機してから返されることを意味します。`scrape_url()`を完全な非同期モードで使うには、`mode="async"`を渡します:

```none
import asyncio
from brightdata import BrightDataClient

async def main():
    async with BrightDataClient() as client:
        result = await client.scrape_url(
            url="https://example.com",
            mode="async",
            poll_interval=5,   # 5秒ごとにチェック
            poll_timeout=180,  # 最大3分まで許容
        )
        print(result.data)

asyncio.run(main())
```

非同期スクレイピングモードでは、SDKは以下を行います:

1. Web Unlocker APIエンドポイントにリクエストを送信します。
2. 保留中のリクエストを識別する`response_id`を受け取ります。
3. データが準備できるかタイムアウトに達するまで、そのIDを使って結果エンドポイントをポーリングします。
4. 結果データが利用可能になったら返します。

同期と非同期のどちらのリクエストモードを選ぶべきかについて詳しくは、[Sync vs. Asyncのドキュメント](https://docs.brightdata.com/concepts/sync-vs-async)をご覧ください。

**注**:

- `poll_interval`と`poll_timeout`パラメータは、SDKが結果を確認する頻度と待機する時間を制御します。`scrape_url()`の場合、デフォルトはそれぞれ`2`秒と`30`秒です。
- Web Unlockerの非同期リクエストは完了までに約2分かかることがあるため、`poll_timeout`を適切に設定してください。

### Bright Data APIの自動セットアップ

SDK経由で行われるリクエストは、アカウント内で構成されたBright Data APIに依存します:

![アカウントで設定されているBright Data API](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791821313295_image.png)デフォルトでは、`SyncBrightDataClient`と`BrightDataClient`の両方が`auto_create_zones=True`を設定しています。このオプションは、必要なAPIゾーンがまだ存在しない場合にSDKが作成するかどうかを制御します。

自動作成が有効な場合、SDKは最初のAPIリクエストを行う前に、以下のゾーンが利用可能であることを確認します:

- Web Unlocker API用の`sdk_unlocker`
- SERP API用の`sdk_serp`

![SDKによって作成された2つのAPIに注目](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791822018286_image.png)APIゾーンを自分で管理したい場合は、`auto_create_zones=False`を設定してください。SDKはAPIを作成しないため、`web_unlocker_zone`と`serp_zone`を通じて既存ゾーンの名前を指定する必要があります。

カスタムのUnlocker APIゾーンを使うには、次のように記述します:

```none
import asyncio
from brightdata import BrightDataClient

async def main():
    async with BrightDataClient(
        auto_create_zones=False,
        web_unlocker_zone="web_unlocker", # カスタムのUnlocker APIゾーンに置き換えてください
    ) as client:
        result = await client.scrape_url("https://example.com")
        print(result.data)

asyncio.run(main())
```

## Bright Data Python SDKを始める:ステップバイステップガイド

概念が明確になったところで、いよいよSDKのインストール、認証、メソッドのテストを行います。

### 前提条件

始める前に、以下を用意してください:

- ローカルにインストールされた[Python 3.9以上](https://www.python.org/downloads/)。
- [Bright Dataアカウント](/?hs_signup=1)。
- [Bright Dataコントロールパネル](/cp/setting/users)で生成できるBright Data APIトークン。

### ステップ1:SDKをインストールする

以下のコマンドでpip経由でBright Data Python SDKをインストールします:

```none
pip install brightdata-sdk
```

すでに古いバージョンをインストールしている場合は、以下でアップグレードします:

```none
pip install -U brightdata-sdk
```

**重要:**本ガイドは`2.5.0`より新しいSDKバージョンを対象としています。

よくできました!続けて認証に進みましょう。

### ステップ2:Bright Data APIトークンで認証する

Bright Data Python SDKは、Bright Data APIへのリクエストを認証するために`BRIGHTDATA_API_KEY`環境変数を読み取ります。

LinuxまたはmacOSでは、以下のように必要な環境変数をBright Data APIキーに設定します:

```none
export BRIGHTDATA_API_KEY="<YOUR_BRIGHT_DATA_API_KEY>"
```

Windows PowerShellでは、以下を実行します:

```none
$Env:BRIGHTDATA_API_KEY = "<YOUR_BRIGHT_DATA_API_KEY>"
```

環境変数が設定されると、デフォルトの非同期クライアントが自動的にAPIキーを読み込みます:

```none
from brightdata import BrightDataClient

async with BrightDataClient() as client:
    # ...
```

クライアントを作成する際に、`token`引数を使ってAPIキーを直接渡すこともできます:

```none
from brightdata import BrightDataClient

async with BrightDataClient(token="<YOUR_BRIGHT_DATA_API_KEY>") as client:
    # ここでAPIリクエストを行う
    ...
```

トークンを直接渡す方法は、簡単なテストには便利です。ただし、ソースファイルにAPIキーをハードコーディングするのは避けましょう。

SDKは以下の順序で認証情報を確認します:

1. `BrightDataClient`または`SyncBrightDataClient`に渡された`token`引数。
2. `BRIGHTDATA_API_TOKEN`環境変数。
3. `BRIGHTDATA_API_KEY`環境変数。
4. `brightdata login`を使ってBright Data CLIが保存した認証情報(利用可能な場合)。

これで準備完了です!これでPython SDKを使って、ウェブページのスクレイピング、検索結果の取得、その他のBright Data APIへのアクセスができるようになりました。

### ステップ3:最初のウェブデータ収集タスクを実行する

SDKのインストールと認証が済んだら、最初のスクレイピングを実行してみましょう。[特定のLinkedInプロフィール](https://es.linkedin.com/in/antonello-zanini)から構造化データを収集したいとします。

このタスクには、`client.scrape.linkedin.profiles()`メソッドで利用できる[Bright Data LinkedIn Profiles Scraper API](/products/web-scraper/linkedin/profiles)を使用できます。これはプロフィールのデータを構造化オブジェクトとして返します:

```none
import asyncio
from brightdata import BrightDataClient
from pprint import pprint

async def main():
    async with BrightDataClient() as client:
        result = await client.scrape.linkedin.profiles(
            url="https://linkedin.com/in/antonello-zanini" # スクレイピング対象のLinkedInプロフィール
        )

        print(f"Success: {result.success}")
        print("\nScraped profile data:")
        pprint(result.data, indent=2, sort_dicts=False)

asyncio.run(main())
```

結果は次のようになります:

![スクリプトによって返された構造化LinkedInプロフィールデータ](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791835516140_image.png)このメソッドが、予想どおりに、指定したLinkedInプロフィールから最新の構造化された公開データを返している様子に注目してください:

![対象のLinkedInプロフィール](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791835586169_image.png)ミッション達成です!

## 高度な使用方法

基本に慣れたところで、より高度なトピックを探る準備ができました。

### ポーリングの仕組み

スクレイピングジョブの中には数秒以上かかるものもあり、実行中の状況を制御したい場合もあるでしょう。このような状況のために、Bright Dataでは[Scraper APIを非同期ジョブとして実行する](https://docs.brightdata.com/api-reference/rest-api/scraper/asynchronous-requests)ことができます。

考え方としては、スクレイピングをトリガーして、すぐにジョブを取得します。その後、ステータスを確認し、完了を待ち、生成された結果を取得します。通常これにはカスタムのポーリングロジックが必要ですが、SDKはすでにこのプロセスを簡素化するメソッドを提供しています。

以下のスクリプトは、LinkedInプロフィールの非同期スクレイピングを実行します:

```none
import asyncio
from brightdata import BrightDataClient

async def main():
    async with BrightDataClient() as client:
        # スクレイピングタスクを開始し、すぐにジョブを返す
        job = await client.scrape.linkedin.profiles_trigger(
            url="https://es.linkedin.com/in/antonello-zanini"
        )
        print(f"Job triggered: {job.snapshot_id}")  # このジョブを識別するID

        # 「running」や「ready」など、ジョブの現在の状態を確認
        status = await job.status()
        print(f"Status: {status}")

        # ジョブが「ready」になるまでポーリング
        await job.wait(timeout=180, verbose=True)

        # ジョブが準備完了したらレコードをダウンロード
        data = await job.fetch()
        print(f"Got {len(data) if isinstance(data, list) else 1} records")

asyncio.run(main())
```

各SDKメソッドが行うことは以下の通りです:

1. `profiles_trigger()`がスクレイピングジョブを開始し、スクレイピングの完了を待たずにジョブオブジェクトを返します。
2. `job.status()`が現在のジョブステータスを確認します。
3. `job.wait()`が、ジョブが準備完了になるかタイムアウトに達するまで、一定間隔でジョブステータスをポーリングします。デフォルトでは10秒ごとにステータスを確認します。タイムアウトが先に達した場合は[`TimeoutError`](https://docs.python.org/3/builtins/exceptions.html#TimeoutError)を発生させます。
4. `job.fetch()`が、ジョブの準備が完了したらスクレイピングされたレコードを取得します。

`verbose=True`を設定すると、各ステータスチェックが出力されるため、ジョブの進行状況を追跡できます:

![前のスクリプトによって生成されたログ](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791832933568_image.png)各ステップを自分で管理する必要がない場合、`to_result()`は待機、取得、結果オブジェクトへのラップを1つにまとめます:

```none
import asyncio
from brightdata import BrightDataClient
from pprint import pprint

async def main():
    async with BrightDataClient() as client:
        # スクレイピングタスクを開始し、すぐにジョブを返す
        job = await client.scrape.linkedin.profiles_trigger(
            url="https://es.linkedin.com/in/antonello-zanini"
        )
        print(f"Job triggered: {job.snapshot_id}")  # このジョブを識別するID

        result = await job.to_result(timeout=180) # ポーリング、取得、データ取得を一度に行う

        print(f"Success: {result.success}")
        print("\nScraped profile data:")
        pprint(result.data, indent=2, sort_dicts=False)

asyncio.run(main())
```

これは、このチュートリアルの前半で示した`scrape.linkedin.profiles()`メソッドと同じ結果オブジェクトを返します。

ポーリングをより細かく制御したい場合は、`job.status()`を繰り返し呼び出し、返されるステータス(すなわち`"running"`、`"ready"`、または`"error"`)に基づいてロジックを調整する独自のループを実装することを検討してください。

### 複数のページを同時にスクレイピングする

複数のページを取得する必要がある場合は、URLのリストをBright Data Python SDKのスクレイピングメソッドに渡します。SDKはそれらを同時に取得し、URLごとに1つの結果オブジェクトを返します。以下のサンプルをご覧ください:

```none
import asyncio
from brightdata import BrightDataClient

urls = [
    "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
    "https://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html",
    "https://books.toscrape.com/catalogue/soumission_998/index.html",
]

async def main():
    async with BrightDataClient() as client:
        # すべてのURLを同時に取得
        results = await client.scrape_url(urls)

        # resultsの各要素は1つのURLに対する結果オブジェクト
        for i, r in enumerate(results):
            if r.success:  # 失敗したURLはスキップ
                print(f"URL: {urls[i]}")
                print(f"{r.data[:500]}...")  # 生のHTMLの最初の500文字
                print("-" * 80 + "\n")

asyncio.run(main())
```

このスクリプトは、成功した各URLについて、その生のHTMLの最初の500文字を表示する行を出力します:

![スクレイピングされた3つの異なるHTMLページに注目](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791833920080_image.png)同じ考え方がプラットフォームスクレイパーにも適用されます。以下のスクリプトは2つのLinkedInプロフィールを同時に収集します:

```none
import asyncio
from brightdata import BrightDataClient

PROFILE_URLS = [
    "https://es.linkedin.com/in/antonello-zanini",
    "https://it.linkedin.com/in/federico-trotta",
]

async def main():
    async with BrightDataClient() as client:
        linkedin = client.scrape.linkedin

        # 先にすべてのプロフィールをトリガーし、どれかを待つ前にすべてのジョブを開始する
        job = await linkedin.profiles_trigger(url=PROFILE_URLS)

        # ジョブが「ready」になるまでポーリング
        await job.wait(timeout=180, verbose=True)

        # ジョブが準備完了したらレコードをダウンロード
        data = await job.fetch()
        print(f"Got {len(data) if isinstance(data, list) else 1} records")

asyncio.run(main())
```

出力は、同時にスクレイピングされた2つのプロフィールを含むデータセットになります:

![スクリプトが2つのLinkedInプロフィールを同時にスクレイピングしたことに注目](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791834093109_image.png)### 取得したデータをエクスポートする

SDKは、データセットのレコードと`scrape`メソッドの結果という2種類のデータを保存できます。データセットのレコードは`export()`ヘルパーでエクスポートでき、`scrape`の結果には`save_to_file()`ヘルパーがあります。

[データセット](/products/datasets)は、新規にスクレイピングするのではなく事前収集済みのデータが必要な場合に便利です。データセットのレコードをエクスポートするには、スナップショットを作成してレコードをダウンロードし、それを`export()`ヘルパーに渡してファイルに書き込みます:

```none
import asyncio
from brightdata import BrightDataClient
from brightdata.datasets import export

async def main():
    async with BrightDataClient() as client:
        imdb = client.datasets.imdb_movies

        # フィルタされたレコード(IMDB評価9以上、評価数100以上の映画)に対する
        # スナップショットを作成し、リストとしてダウンロードする
        snapshot_id = await imdb(
            filter={
                "operator": "and",
                "filters": [
                    {"name": "imdb_rating", "operator": ">=", "value": 9},
                    {"name": "imdb_rating_count", "operator": ">", "value": 100},
                ],
            },
            records_limit=10,
        )
        data = await imdb.download(snapshot_id)

        export(data, "imdb_top_rated.csv")  # .csv拡張子でCSV形式を選択

asyncio.run(main())
```

**注**:出力形式は拡張子から選択され、`.json`、`.jsonl`、`.csv`がサポートされています。

上記のスクリプトは、プロジェクトのフォルダ内に以下の`imdb_top_rated.csv`ファイルを作成します:

![出力された「imdb_top_rated.csv」ファイル](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791835152372_image.png)`scrape`メソッドの結果をファイルにエクスポートするには、`save_to_file()`を呼び出します:

```none
import asyncio
from brightdata import BrightDataClient

async def main():
    async with BrightDataClient() as client:
        result = await client.scrape.linkedin.profiles(
            url="https://es.linkedin.com/in/antonello-zanini"
        )

        result.save_to_file("antonello_zanini.json", format="json")  # ディスクに書き込まれる

asyncio.run(main())
```

**注**:JSON形式のみがサポートされています。

これにより、以下のような`antonello_zanini.json`ファイルが生成されます:

![出力された「antonello_zanini.json」ファイル](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791835250162_image.png)## 実践編:Bright Data Python SDKのユースケース

より高度なシナリオを探ったところで、実際のユースケースに取り組むための基礎が身につきました。

### 検索エンジンの結果を比較する

[SERP追跡](/use-cases/serp-tracking)においては、異なる検索エンジンが同じクエリをどのように扱うかを理解することが重要です。以下のスクリプトは、同じクエリをGoogleとBingの両方で実行します:

```none
# pip install brightdata-sdk

import asyncio
from brightdata import BrightDataClient

# 複数の検索エンジンで実行するクエリ
query = "best HTML parsers"

async def main():
    async with BrightDataClient() as client:
        # GoogleとBingからパース済みの検索結果を取得
        google = await client.search.google(query=query, num_results=10)
        bing = await client.search.bing(query=query, num_results=10)

        # 各検索エンジンの上位3件の結果を出力
        for name, result in [("Google", google), ("Bing", bing)]:
            print(f"\n{name}:")
            for item in result.data[:3]:
                print(f"  - {item['title']} ({item['url']})")

asyncio.run(main())
```

GoogleとBingは、`title`や`url`といったフィールドを含む、パース済みのオーガニック検索結果を返します。このデータには直接アクセスでき、例えば上位3件の結果を出力することができます:

![同じ検索クエリに対するGoogleとBingの上位3件の結果に注目](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791840322204_image.png)### Amazonの製品情報を完全に取得する

[Amazonのスクレイピング](/blog/how-tos/how-to-scrape-amazon)は、製品ページから構造化データを収集するだけにとどまりません。製品評価、感情分析、監視などに役立つ情報を提供する製品レビューの抽出も含まれることがあります。

異なるBright Data Scraper APIのおかげで、以下のようにSDKを通じて製品情報とレビューの両方を取得できます:

```none
# pip install brightdata-sdk

import asyncio
from brightdata import BrightDataClient

product_url = "https://www.amazon.com/dp/B0DCH8VDXF/"

async def main():
    async with BrightDataClient() as client:
        # 製品とレビューの両方のデータを取得
        product = await client.scrape.amazon.products(url=product_url)
        reviews = await client.scrape.amazon.reviews(url=product_url, pastDays=30, keyWord="quality")

        # スクレイピングしたデータを出力
        print(f"Title: {product.data['title']}")
        print(f"Price: {product.data['final_price']}")
        print(f"Rating: {product.data['rating']}")
        print(f"Reviews fetched: {len(reviews.data)}")

asyncio.run(main())
```

このスクリプトは、`client.scrape.amazon.reviews()`のフィルタリングオプションを活用し、「quality」というキーワードを含む過去30日間のレビューのみを取得しています。

出力は次のようになります:

![製品データとレビューデータに注目](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791840123670_image.png)**注**:返される値は、製品とリクエスト時刻によって異なります。

### BeautifulSoupでブロック解除済みのページをパースする

一般的な[ウェブスクレイピングのロードマップ](/blog/web-data/web-scraping-roadmap)には以下が含まれます:

1. ウェブページを取得する。
2. [HTMLパーサー](/blog/web-data/best-python-html-parsers)でパースする。
3. 必要なデータを抽出する。

問題は、多くのウェブサイトがHTMLコンテンツへの自動リクエストをブロックできる[対策を採用していることです](/blog/web-data/anti-scraping-techniques)。可能な解決策として、ブラウザフィンガープリンティング、プロキシのローテーション、CAPTCHAの解決、その他の課題を処理するBright Data Web Unlocker APIのようなサービスを通じてこれらのページにアクセスする方法があります。

例えば、[NBAストアのステファン・カリーのゴールデンステート・ウォリアーズのジャージ](https://store.nba.com/golden-state-warriors/mens-golden-state-warriors-stephen-curry-fanatics-royal-fast-break-replica-jersey-icon-edition/t-14140641+p-138834682113177+z-9-2551128663?_ref=p-SFLP:m-GRID:i-r0c0:po-0)の製品ページを取得し、その名前、ブランド、価格、在庫状況、利用可能なサイズを収集したいとします。

以下のスクリプトは、SDKの`scrape_url()`メソッドを使ってページを取得し、返された[HTMLをBeautifulSoupに読み込ませ](/blog/how-tos/beautiful-soup-web-scraping)、製品フィールドを抽出します:

```none
# pip install brightdata-sdk beautifulsoup4

import asyncio
from brightdata import BrightDataClient
from bs4 import BeautifulSoup
import json

NBA_PRODUCT_URL = (
    "https://store.nba.com/golden-state-warriors/mens-golden-state-warriors-stephen-curry-"
    "fanatics-royal-fast-break-replica-jersey-icon-edition/t-14140641+p-138834682113177+z-9-2551128663"
    "?_ref=p-SFLP:m-GRID:i-r0c0:po-0"
)

async def main():
    # 対ボット対策を避けるため、scrape_url()でページを取得
    async with BrightDataClient() as client:
        result = await client.scrape_url(NBA_PRODUCT_URL)

    # パースするためにHTMLをBeautifulSoupに読み込む
    soup = BeautifulSoup(result.data, "html.parser")

    # ページのメイン見出しから製品名を抽出
    title = soup.find("h1", attrs={"data-talos": "labelPdpProductTitle"}).get_text(strip=True)

    # 製品を記述するJSON-LDブロックを見つける
    product_ld_data = None
    for script in soup.find_all("script", type="application/ld+json"):
        data = json.loads(script.string)
        if data.get("@type") == "Product":
            product_ld_data = data
            break

    # そこから一部のデータにアクセス
    brand = product_ld_data["brand"]
    images = product_ld_data["image"]

    # 最初のオファーから価格と在庫状況を読み取る
    offer = product_ld_data["offers"][0]
    price = offer["priceSpecification"]["price"]
    currency = offer["priceSpecification"]["priceCurrency"]
    availability = offer["availability"].rsplit("/", 1)[-1]

    # ボタンであるサイズを抽出し、その表示テキストがサイズラベル(S、M、L、...)となる
    sizes = [b.get_text(strip=True) for b in soup.find_all("button", attrs={"data-talos": "buttonSize"})]

    # スクレイピングしたデータを収集
    product = {
        "title": title,
        "brand": brand,
        "images": images,
        "price": price,
        "currency": currency,
        "availability": availability,
        "sizes": sizes,
    }

    # スクレイピングしたデータを出力
    print(json.dumps(product, indent=2))

asyncio.run(main())
```

出力は次のようになります:

![ブロック解除済みのNBA製品ページからパースされたデータ](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791836755290_image.png)これらのフィールドは、対象ページに表示されている情報に対応しています。

![対象のNBA製品ページ](https://media.brightdata.com/2026/10/s_E99EAF242DF71FD840F1A7951C8299B6C3A5C7DFC72A5CE7E1E12632B311F396_1791840804593_image.png)## 結論

本ブログ記事では、Bright Data Python SDKが、Bright Dataのスクレイピング、検索、データセット製品へのアクセスを1つのPythonパッケージで提供する方法について学びました。また、SDKをインストールし、実際のシナリオで使用する方法もご覧いただきました。

さらに詳しく知りたい場合は、[公式ドキュメント](https://docs.brightdata.com/api-reference/SDK)、[GitHubリポジトリ](https://github.com/brightdata/sdk-python)、各機能の動作するスクリプトを収めた[examplesディレクトリ](https://github.com/brightdata/sdk-python/tree/main/examples)をご覧ください。SDKが役立つと感じた場合は、ぜひリポジトリにスターを付けてください!

今すぐBright Dataアカウントを作成し、Python SDKを試して、Bright Data APIへのアクセスを簡素化しましょう。

## FAQ

### Bright Data Python SDKはなぜ便利なのですか?

これは、Python開発者にウェブサイトのスクレイピング、検索エンジンクエリの実行、ボット検出やCAPTCHAの回避、構造化されたプラットフォームデータの抽出、そして100以上の既成データセットへのアクセスを行うための、一貫した単一のパッケージを提供します。そのおかげで、そのようなインフラを自分で構築する必要がありません。

### SDKを使うのにBright Data CLIは必要ですか?

いいえ。SDKは`BRIGHTDATA_API_KEY`または`BRIGHTDATA_API_TOKEN`に設定されたAPIトークンで動作します。すでに`brightdata login`を実行している場合、SDKはCLIが保存した認証情報にフォールバックするため、他に何も設定する必要はありません。

### Bright Data CLI、Python SDK、MCP、Agent Skillsの違いは何ですか?

CLIはターミナルからBright Dataのコマンドを実行します。Python SDKは、Pythonのコードから APIを呼び出せるようにします。[Bright Data MCP](/ai/mcp-server)サーバーは、AIエージェントにスクレイピングと検索のツールを提供し、[Agent Skills](/blog/ai/bright-data-skills-coding-agents)はコーディングエージェントにBright Dataの使い方を教えます。

### Bright Data Python SDKとBright Data JavaScript SDKの違いは何ですか?

Python SDK(pipでインストールする`brightdata-sdk`)は、`scrape_url()`のようなスネークケースのメソッドを持つ、同期・非同期クライアントを提供します。JavaScript SDK(npmでインストールする[`@brightdata/sdk`](https://docs.brightdata.com/api-reference/SDK-JS))は、Node.js上で動作し、`scrapeUrl()`のようなキャメルケースのメソッドを使用します。

### 同期モードと非同期モードはいつ使うべきですか?

各呼び出しが結果が準備できるまでブロックされるため、シンプルなスクリプトや簡単な確認作業には同期クライアントを使用してください。高い同時実行性のワークロード、バッチジョブ、バックグラウンド処理には非同期クライアントを使用してください。



お問い合わせ無料トライアル![google social icon](/wp-content/themes/brightdata/assets/images/ic_google.svg)









 目次







日本企業向けデータソリューション

日本のトップ企業が信頼するスケーラブルなウェブデータプラットフォーム。日本語24時間サポート、GDPR・個人情報保護法準拠、日本企業20社以上の導入実績。

[詳細を見る](https://brightdata.jp/solutions/data-solutions-for-japanese-companies "詳細を見る")







 [ ](https://news.ycombinator.com/submitlink?t=Bright+Data+Python+SDK%E3%81%AE%E7%B4%B9%E4%BB%8B%3A%E3%82%A6%E3%82%A7%E3%83%96%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%80%81%E6%A4%9C%E7%B4%A2%E3%80%81%E5%8F%96%E5%BE%97&u=https://brightdata.jp/blog/ai/bright-data-python-sdk) [ ](https://www.linkedin.com/shareArticle?mini=true&title=Bright+Data+Python+SDK%E3%81%AE%E7%B4%B9%E4%BB%8B%3A%E3%82%A6%E3%82%A7%E3%83%96%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%80%81%E6%A4%9C%E7%B4%A2%E3%80%81%E5%8F%96%E5%BE%97&url=https://brightdata.jp/blog/ai/bright-data-python-sdk) [ ](http://www.reddit.com/submit?title=Bright+Data+Python+SDK%E3%81%AE%E7%B4%B9%E4%BB%8B%3A%E3%82%A6%E3%82%A7%E3%83%96%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%80%81%E6%A4%9C%E7%B4%A2%E3%80%81%E5%8F%96%E5%BE%97&url=https://brightdata.jp/blog/ai/bright-data-python-sdk)







##  あなたは下記にもご興味がおありかもしれません

 [ ![Claude Code Routines](https://media.brightdata.jp/2026/10/Claude-Code-Routines.png) ](https://brightdata.jp/blog/ai/claude-code-routines "Claude Codeルーティン:Bright Dataで毎日のウェブ監視をスケジュール")

 [AI



 ![Satyam Tripathi](https://media.brightdata.jp/2024/09/Satyam-Tripathi-50x50.png)

Satyam Tripathi

Technical Writer





### Claude Codeルーティン:Bright Dataで毎日のウェブ監視をスケジュール

Learn how to give Claude Code routines web access with Bright Data and build a daily price monitor that checks every page it reads.をBright Dataで実現し、読み取るすべてのページをチェックする毎日の価格モニターを構築する方法を学びましょう。



 18-Oct-2026

 8 分読

 ](https://brightdata.jp/blog/ai/claude-code-routines)

 [ ![Is There a Google Search API](https://media.brightdata.jp/2026/10/Is-There-a-Google-Search-API_.png) ](https://brightdata.jp/blog/%e3%82%a6%e3%82%a7%e3%83%96%e3%83%87%e3%83%bc%e3%82%bf/google-search-api "Google検索APIはあるか?Custom Searchの後の選択肢")

 [ウェブデータ



 ![Satyam Tripathi](https://media.brightdata.jp/2024/09/Satyam-Tripathi-50x50.png)

Satyam Tripathi

Technical Writer





### Google検索APIはあるか?Custom Searchの後の選択肢

Custom Search JSON APIからBright DataのSERP APIへの移行方法を、ドロップインのcse.list()アダプターとパラメータ対応表とともに解説します。



 18-Oct-2026

 2 分読

 ](https://brightdata.jp/blog/%e3%82%a6%e3%82%a7%e3%83%96%e3%83%87%e3%83%bc%e3%82%bf/google-search-api)

 [ ![Amazon Bedrock Knowledge Bases with Bright Data](https://media.brightdata.jp/2026/08/Amazon-Bedrock-Knowledge-Bases-with-Bright-Data.png) ](https://brightdata.jp/blog/%e5%90%84%e7%a8%ae%e3%81%94%e5%88%a9%e7%94%a8%e6%96%b9%e6%b3%95/amazon-bedrock-knowledge-bases-with-bright-data "Bright Dataを使ってAmazon Bedrock Knowledge Basesにライブウェブデータを供給する方法")

 [各種ご利用方法



 ![Satyam Tripathi](https://media.brightdata.jp/2024/09/Satyam-Tripathi-50x50.png)

Satyam Tripathi

Technical Writer





### Bright Dataを使ってAmazon Bedrock Knowledge Basesにライブウェブデータを供給する方法

Bright Dataは、JavaScriptレンダリング、ボット対策、地域制限によってブロックされていたウェブデータへのアクセスをAmazon Bedrock Knowledge Basesに可能にします。



 15-Oct-2026

 11 分読

 ](https://brightdata.jp/blog/%e5%90%84%e7%a8%ae%e3%81%94%e5%88%a9%e7%94%a8%e6%96%b9%e6%b3%95/amazon-bedrock-knowledge-bases-with-bright-data)
