【Python】Google 検索 API(Custom Search API)の取得手順と使い方

  • URLをコピーしました!
目次

はじめに

Web 上の情報を収集・分析する際、ブラウザを開いて手作業で検索し、結果を Excel にコピペする……そんな単純作業に時間を奪われていませんか?

Google が提供する Custom Search JSON API(通称:Google 検索 API) を利用すれば、Python などのプログラムから Google 検索を自動実行し、検索結果を「データ」として直接取得できます。 特定のキーワードに関連する URL を一括収集したり、自作アプリケーションに検索機能を組み込んだりと、その活用幅はアイデア次第で大きく広がります。

Google 検索をプログラムから自動化するメリット

API を利用する最大のメリットは、「手作業の限界を超えられること」 です。

大量の検索

人力では不可能な数百、数千のキーワード調査を一瞬で完了できる。

データ解析

検索結果(タイトル、リンク、スニペット)を JSON 形式で取得できるため、そのままスクレイピングや分析に回せる。

自社アプリへの統合

独自の検索窓をサイトやツール内に設置できる。

この記事でわかること
  • Google Custom Search API(Custom Search JSON API)の仕組みと料金(無料枠)
  • API キー と 検索エンジン ID (cx) の正しい取得手順
  • 【Python 実装】 基本的な検索コードから、GUI(Tkinter)を使ったデスクトップ検索ツールの作成まで

Google Custom Search API(Google 検索 API)とは

Google Custom Search API(正式名称:Custom Search JSON API)は、Google の検索エンジンを自分のプログラムや Web サイトから利用できるようにするサービスです。 Python などのスクリプトからキーワードを投げると、Google 検索の結果(タイトル、URL、要約文など)を JSON 形式のデータとして返してくれます。

通常の Google 検索(手動)との違い

ブラウザで検索した結果と、API 経由で取得した結果は、必ずしも完全には一致しません。主な理由は以下の2点です。

パーソナライズの有無(最大の違い)
手動検索

あなたの過去の検索履歴、位置情報、Google アカウントの行動履歴に基づいて、Google が「あなたに最適な結果」を表示します。

API 検索

ユーザー個人の文脈を持たない「中立的な検索結果」が返されます。そのため、SEO の順位計測など、客観的なデータ収集にはむしろ API の方が適しています。

検索アルゴリズムの適用
  • Web 版の Google 検索と API では、適用されるアルゴリズムのバージョンやインデックスの更新タイミングにタイムラグがある場合があります。

無料枠と料金について(1日100回制限の注意点)

この API は従量課金制の有料サービスですが、開発者向けの無料枠が設けられています。

  • 無料枠: 1日あたり 100 リクエスト(検索回数)まで
  • 有料枠: 100回を超えると、1,000 リクエストあたり $5(約750円前後/為替変動あり)の課金が発生します。
💡【重要】初心者は「請求先アカウント」を設定しないのがおすすめ

Google Cloud Platform(GCP)の設定でクレジットカード(請求先アカウント)を紐付けなければ、100回を超えた時点で API がエラー(403 Limit Exceeded)を返し、自動的にストップします。 「うっかり無限ループでコードを書いてしまい、高額請求が来た!」という事故を防ぐため、慣れるまでは無料枠の範囲内で運用するのが安全です。

API キーと検索エンジン ID の取得手順

Python から検索を行うには、「API キー(認証情報)」「検索エンジン ID(検索対象の指定)」 の2つが必要です。 これらは取得場所が異なりますので、以下の手順でそれぞれ発行してください。

STEP
Google Cloud Console で API キーを発行する

まずは、Google のクラウドサービス上で API を有効化し、鍵(Key)を取得します。

STEP
Google Cloud Console にアクセス

Google Cloud Console にログインします。

STEP
プロジェクトの作成

画面左上のプロジェクト選択プルダウンから「新しいプロジェクト」を作成します(名前は search-api-test などで OK)

STEP
API の有効化

左メニューの [API とサービス] > [ライブラリ] をクリック。 検索窓に「Custom Search API」と入力して検索し、「Custom Search API」 を選択して [有効にする] をクリックします。

STEP
API キーの作成

左メニューの [API とサービス] > [認証情報] をクリック。 画面上部の [+ 認証情報を作成] > [API キー] を選択します。

  • 表示された「API キー」をコピーしてメモ帳などに保存してください。
  • ※セキュリティのため、API キーの編集画面で「API の制限」を行い、Custom Search API のみが使えるように制限をかけることを推奨します。
STEP
Programmable Search Engine で検索エンジン ID を取得する

次に、検索の「中身(どのサイトを検索するか)」を定義する検索エンジンを作成します。

STEP
Programmable Search Engine にアクセス

Programmable Search Engine (旧 Google Custom Search)
の管理画面にアクセスし、[使ってみる] をクリックします。

STEP
検索エンジンの作成 [追加]
  • 検索エンジンの名前: 任意の名前(例: My Python Search)
  • 検索対象: 特定のサイトだけ検索したい場合は URL を入力しますが、Web 全体を検索したい場合 は、一旦 www.google.com など適当な URL を入力して作成します(後で変更します)
  • 私はロボットではありません: チェックを入れて [作成]
STEP
検索エンジン ID (cx) の取得

作成完了画面、または管理画面の「基本」タブにある [検索エンジン ID] をコピーして保存してください。これがコード内の cx になります。

Web全体を検索したい場合の設定変更

作成した検索エンジンの管理画面で、[検索機能] の設定を確認し、「Web 全体を検索」を オン にしてください。 これを忘れると、最初に登録した www.google.com の中しか検索されないため、「結果が0件になる」原因になります。

Pythonによる実装サンプル

それでは、実際にコードを書いてみましょう。 今回は Google が公式提供している Python ライブラリを使用するため、複雑な HTTP 通信の処理を自分で書く必要はありません。

準備: ライブラリのインストール

ターミナル(またはコマンドプロンプト)で以下のコマンドを実行し、Google API クライアントライブラリをインストールしてください。

pip install google-api-python-client

基本: キーワード検索して結果を JSON で取得する

まずは、「Python」というキーワードで検索し、返ってきたデータをそのまま表示する基本のコードです。 API_KEYCSE_ID には、先ほど取得した文字列を貼り付けてください。

from googleapiclient.discovery import build
import pprint

# -------------------------------------------------
# 設定エリア
# -------------------------------------------------
API_KEY = "あなたのAPIキー"
CSE_ID = "あなたの検索エンジンID(cx)"
SEARCH_QUERY = "Python 自動化"
# -------------------------------------------------

def main():
    # APIクライアントの構築
    service = build("customsearch", "v1", developerKey=API_KEY)

    try:
        # 検索の実行
        # q=キーワード, cx=検索エンジンID, num=取得件数(最大10)
        result = service.cse().list(
            q=SEARCH_QUERY,
            cx=CSE_ID,
            num=10
        ).execute()

        # 結果を整形して表示
        pprint.pprint(result)

    except Exception as e:
        print(f"エラーが発生しました: {e}")

if __name__ == '__main__':
    main()

実行すると、検索結果のタイトルや URL、要約(snippet)が含まれた JSON データが表示されます。これが取得できれば成功です。

応用:検索結果をブラウザのタブで一気に開く

JSON を眺めるだけでは面白くないので、「検索結果の上位サイトをブラウザで一気に開く」 ツールに進化させます。 情報収集の効率が劇的に上がります。

import webbrowser
from googleapiclient.discovery import build

API_KEY = "あなたのAPIキー"
CSE_ID = "あなたの検索エンジンID(cx)"

def main():
    query = input("検索キーワードを入力してください: ")
    
    service = build("customsearch", "v1", developerKey=API_KEY)
    
    # 検索実行
    print("検索中...")
    response = service.cse().list(q=query, cx=CSE_ID, num=5).execute()

    # 検索結果(items)が存在するか確認
    if 'items' not in response:
        print("検索結果が見つかりませんでした。")
        return

    # ループ処理でURLを開く
    for i, item in enumerate(response['items'], start=1):
        title = item['title']
        link = item['link']
        
        print(f"[{i}] {title}")
        print(f"    URL: {link}")
        
        # PCのデフォルトブラウザで開く
        webbrowser.open(link)

if __name__ == '__main__':
    main()

ポイント: webbrowser.open() を使うと、Windows/Mac/Linux 問わず、普段使っている既定のブラウザ(Chrome や Edge など)で自動的に開かれます。パス指定の手間は不要です。

発展: Tkinter でデスクトップ検索ツールを作る(GUI)

最後に、Python 標準の GUI ライブラリ tkinter を使って、デスクトップに常駐する「自分専用検索バー」を作ってみましょう。 ウィンドウを最前面に固定することで、作業中にサッと検索できるようになります。

import tkinter as tk
import webbrowser
from googleapiclient.discovery import build

# -------------------------------------------------
API_KEY = "あなたのAPIキー"
CSE_ID = "あなたの検索エンジンID(cx)"
# -------------------------------------------------

def run_search(event=None):
    """検索を実行し、結果をブラウザで開く関数"""
    query = entry.get()
    if not query:
        return

    try:
        service = build("customsearch", "v1", developerKey=API_KEY)
        res = service.cse().list(q=query, cx=CSE_ID, num=5).execute()

        if 'items' in res:
            for item in res['items']:
                # デフォルトブラウザでURLを開く
                webbrowser.open(item['link'])
        else:
            print("結果が見つかりませんでした")

        # 入力欄をクリア
        entry.delete(0, tk.END)

    except Exception as e:
        print(f"エラー: {e}")

# メインウィンドウの作成
root = tk.Tk()
root.title("My Search Bar")
root.geometry("400x80")

# ウィンドウを常に最前面に表示する設定
root.attributes("-topmost", True)
# 少し半透明にする(お好みで調整してください: 0.1〜1.0)
root.attributes("-alpha", 0.9)

# 入力フォーム(Entry)
entry = tk.Entry(root, width=40, font=("Meiryo", 12))
entry.pack(side=tk.LEFT, padx=10, pady=20)
# Enterキーでも検索実行
entry.bind('<Return>', run_search)

# 検索ボタン(Button)
btn = tk.Button(root, text="検索", command=run_search, bg="#4285F4", fg="white")
btn.pack(side=tk.LEFT, padx=5)

# アプリ実行
root.mainloop()

これを実行すると、半透明の検索バーがデスクトップに現れます。 キーワードを入れて Enter を叩くだけで、ブラウザに関連記事がバッと開きます。

他の検索 API との比較:Bing Search API という選択肢

Google Custom Search API は非常に便利ですが、「無料枠が1日100回まで」 という制限は、頻繁にデータを収集したい開発者にとっては少々厳しいハードルです。 開発中にコードを修正して何度も実行していると、あっという間に上限に達して 403 Error が返ってくることもしばしばです。

もっと大量に検索したいなら「Bing Search API」も検討しよう

Microsoft が Azure プラットフォームで提供している Bing Search API も、Google と同様に高品質な検索結果を JSON で取得できます。 もし Google の無料枠で足りない場合や、異なる検索アルゴリズムの結果も比較したい場合は、Bing API の併用がおすすめです。

以下の記事では、Bing の API を活用する方法についても詳しく解説しています。

まとめ

本記事では、Python を使って Google 検索を自動化する Google Custom Search API(Custom Search JSON API) の導入手順と実装方法を解説しました。

  • Google Cloud(GCP)で「API キー」を発行する。
  • Programmable Search Engine で「検索エンジン ID(cx)」を取得する。
  • Python の google-api-python-client ライブラリを使えば、わずか数行で検索結果を取得できる。
  • Tkinter などを組み合わせれば、自分だけの「検索ツール」も自作可能

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

インフラ(クラウド/NW/仮想化)から Web 開発まで、技術領域を横断して活動するエンジニア💻 コンシューマー向けエンタメ事業での新規開発・運営経験を活かし、実戦的な技術ノウハウを発信中

[ Certs ] CCIE Lifetime Emeritus / VCAP-DCA ✒️ [ Life ] 技術書・ビジネス書愛好家📖 / 小・中学校で卓球コーチ👟

目次