Python で Google API を使用するカスタム検索エンジン

Jay Shaw 2023年6月21日
  1. Google CSE プラットフォームを使用して検索エンジンを作成する
  2. カスタム検索 API を Python で実装する
  3. まとめ
Python で Google API を使用するカスタム検索エンジン

この記事では、Python で Google 検索 API を使用してカスタム検索エンジン (CSE) を作成する方法について説明します。 CSE は、開発者向けに設計された検索エンジンであり、Web サイト、モバイル アプリなど、あらゆるアプリケーションに組み込むことができます。

Web スクレイピングには、多くのアプリで Google カスタム検索エンジンが使用されています。 この記事では、CSE を設定し、Python で Google 検索 API を使用する方法について説明します。

数回のリクエストごとに検索が制限されるため、手動で Google 検索をスクレイピングすることはお勧めできません。

Google CSE プラットフォームを使用して検索エンジンを作成する

Python で Google Search API を使用して検索結果を取得するには、3 層のプロセスがあります。 Google 検索から直接結果を返す Web スクレイピングとは異なり、この方法ではカスタム検索エンジンを作成し、それを使用して結果を取得します。

これにより、リクエストを送信するためのしきい値がなくても、スクラップと同じ結果を取得できます。

検索エンジンを作成するには、programmable search engine ページを参照するか、この リンク をクリックしてください。 検索エンジンの名前を付けて、サンプルの URL を What to search? 内に追加します。

このサンプル URL は後で変更できることに注意してください。

reCAPTCHA を確認し、[作成] をクリックしてカスタム検索エンジンを作成します。 この検索エンジンは、ウェブ全体にアクセスできるように微調整する必要があります。

次のページでカスタマイズをクリックします。

CSE の作成

Basic の下には、検索リクエストの送信に使用される検索エンジン ID などのいくつかの重要なデータがあります。 検索エンジン ID をコピーして保存します。

検索機能まで下にスクロールし、ウェブ全体を検索オプションをオンにします。

検索するサイト セクションで、追加した URL のチェックボックスをオンにして削除します。 これにより、検索エンジンがウェブ全体に開かれます。

CSE の変更

カスタム検索エンジンを作成したら、Python で Google 検索 API を使用します。

まず、作成した検索エンジンの API を取得する必要があります。

Google API キーを取得する

Google のアプリケーション プログラミング インターフェース (API) は、Google サービスをサードパーティ アプリケーションに埋め込むための Google Cloud の機能です。 カスタム検索 API キーを取得し、それを Python で Google 検索 API として使用するには、Google プロジェクトを作成する必要があります。

カスタム検索エンジンの API キーを取得するには、次の 2つの方法があります。

  1. Google Cloud でプロジェクトを作成し、Google Custom Search API を取得します。
  2. JSON API キーを取得します。

どちらのステップにも Google Cloud プロジェクトが必要です。

Google Cloud でプロジェクトを作成し、Google Custom Search API を取得する

Google Cloud の credentials ページに移動します。 次に、新しいプロジェクトをクリックします。

Google クラウド - 新しいプロジェクト

名前を付けて、編成ボックスをそのままにしておきます。 次に、作成をクリックします。

Google クラウド - [作成] をクリックします

プロジェクトを作成したら、カスタム検索 API をこのプロジェクトにアタッチする必要があります。 左側のパネルで資格情報を選択し、上部の資格情報の作成ボタンをクリックします。

Create Credentials 内で、API キー を選択します。

Google Cloud - Credential API Key

API キー オプションを選択すると、プロジェクトの API キーが作成されます。 Show key をクリックして API キーをコピーします。

Google Cloud - API キーが作成されました

このメソッドからフェッチされた API キーは非アクティブです。 この API キーを持つ Python スクリプトを実行すると、手動でアクティブ化できます。

スクリプトが初めて実行されるときに、アクティベーションのプロンプトが Python によってスローされます。 API キーを有効化すると、カスタム検索エンジンを使用できるようになります。

JSON API キーを取得する

この方法は、キーのアクティベーションを必要としないため、比較的簡単です。 Google Cloud プロジェクトがすでに存在する場合、API キーはこのメソッドから直接取得できます。

プログラマブル検索エンジンの案内ページwebsiteへ。

キーを取得ボタンをクリックして、プロジェクトの選択を求めるポップアップを開きます。

Google Cloud - JSON API Get Key

プロジェクトをクリックして次へを選択し、プロジェクトの API を作成します。

JSON API - プロジェクトの選択

Show key をクリックして API キーを取得します。

Google クラウド - JSON API 表示キー

この JSON API キーは直接使用できますが、Google Cloud の [Credentials] タブから手動で取得した API キーは有効にする必要があります。

カスタム検索 API を Python で実装する

CSE ID と API キーの準備ができたら、スクリプト内で Python の Google 検索 API を使用できます。 プロセスを説明する以下の 2つのプログラムがあります。

例 1:

Python で Google Search API を機能させるには、API キーを解析するための Python ライブラリが必要です。 Google API Python クライアントを使用できます。

インストールするには、CMD または Python を実行する任意の IDE に移動し、Google API Python クライアントをインストールします。

CMD 内で、次のコマンドを記述します。

pip install google-api-python-client

これにより、Python パッケージがシステムにインストールされます。

検索クエリをカスタム検索エンジンに送信して結果を返す Python スクリプトを作成する必要があります。

コード - custom_search_engine.py:

from googleapiclient.discovery import build

my_api_key = "The API_KEY you acquired"
my_cse_id = "The search-engine-ID you created"


def google_search(search_term, api_key, cse_id, **kwargs):
    service = build("customsearch", "v1", developerKey=api_key)
    res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute()
    return res["items"]


results = google_search('"How to code in Python"', my_api_key, my_cse_id, num=10)
for result in results:
    print(result)

コードを分解して、その機能を理解しましょう。 コードの最初の行は、Python ライブラリ パッケージ google api python client から build モジュールをインポートします。

API キーとカスタム検索エンジン ID をそれぞれ格納する 2つのオブジェクト変数 my_api_keymy_cse_id が作成されました。

検索クエリを格納する search_term、API キーを渡す api_key、カスタム検索エンジンの ID を渡す cse_id、そして最後にキーワード引数 ** の 4つのパラメータでメソッド google_search が作成されます。 kwargs.

以下のコードは、build 関数を使用してカスタム検索エンジンに適合する customsearch API サービスを作成する変数 service を作成します。

service = build("customsearch", "v1", developerKey=api_key)

次の行では、service.cse() モジュールを使用して、カスタム検索エンジンに検索クエリを送信し、変数 rex に格納するクライアントを作成します。

list(q=search_term, cx=cse_id, **kwargs) は、検索語からフェッチされた結果のリストを作成します。ここで、**kwargs は、検索語から返される検索語の数を制限するために使用されます。 クライアント。

res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute()

最後に、変数 rex が検索結果リストの配列として返されます。

最後に、検索結果を格納する変数 result が作成されます。 メソッド google_search は、最初のパラメーターとして検索クエリを指定して呼び出されます。 次に、その API キー、CSE ID、および次のパラメーターの検索反復回数。

返されたリストは、変数 result に格納されます。 for ループ内では、その長さまで表示されます。

results = google_search('"How to code in Python"', my_api_key, my_cse_id, num=10)
for result in results:
    print(result)

出力:

Python によるカスタム検索 API の実装 - 出力 1

例 2:

この例では、外部依存関係を使用せずに検索リクエストを送信する Python スクリプトを作成します。 このプログラムは、API キーと CSE ID を使用して、組み込みの Python ライブラリと Python の Google 検索 API を使用するクライアントを作成します。

コード:

import requests

API_KEY = "Your API Key"

SEARCH_ENGINE_ID = "Your CSE ID"

# the search query you want
query = "Starboy"
# using the first page
page = 1
# construct the URL
# doc: https://developers.google.com/custom-search/v1/using_rest
# calculating start, (page=2) => (start=11), (page=3) => (start=21)
start = (page - 1) * 10 + 1
url = f"https://www.googleapis.com/customsearch/v1?key={API_KEY}&cx={SEARCH_ENGINE_ID}&q={query}&start={start}"

# make the API request
data = requests.get(url).json()

# get the result
search_items = data.get("items")
# iterate over 10 results
for i, search_item in enumerate(search_items, start=1):
    try:
        long_description = search_item["pagemap"]["metatags"][0]["og:description"]
    except KeyError:
        long_description = "N/A"
    # get the title of the page
    title = search_item.get("title")
    # get the page snippet
    snippet = search_item.get("snippet")
    # alternatively, you also can get the HTML snippet (bolded keywords)
    html_snippet = search_item.get("htmlSnippet")
    # extract page url
    link = search_item.get("link")
    # print results
    print("=" * 10, f"Result #{i+start-1}", "=" * 10)
    print("Title:", title)
    print("Description:", snippet)
    print("Long description:", long_description)
    print("URL:", link, "\n")

上記のコードが何をするかを理解しましょう。

最初の行は、Python HTTP ライブラリ requests をインポートします。 API_KEYSEARCH_ENGINE_ID の 2つの変数が初期化され、以前に作成された資格情報が保存されます。

import requests

API_KEY = "Your API Key"
SEARCH_ENGINE_ID = "Your CSE ID"

変数 query は、アプリケーションが検索する検索語を格納するために使用されます。 変数 page は特定のページからの検索結果を表示し、変数 start はそのページからの一連の結果を示します。

たとえば、各ページには 10 件の検索結果があります。 変数 startpage = 1 が含まれている場合、最初の 10 ページを意味する最初の 10 件の検索結果が表示されます。一方、page = 2 は、検索結果に続いて 10 番目の結果が表示されます。つまり、11 番目からの結果が表示されます。 .

変数 url には、カスタム検索エンジンから検索結果を取得するために使用されるサービス URL が格納されます。 API キー、検索クエリ、表示される検索結果のページ番号などの資格情報を保存します。

query = "Starboy"
page = 1
start = (page - 1) * 10 + 1
url = f"https://www.googleapis.com/customsearch/v1?key={API_KEY}&cx={SEARCH_ENGINE_ID}&q={query}&start={start}"

このプログラムは、保存された URL に requests 関数を使用して API リクエストを送信し、API 呼び出しから返されたデータを変数 data に保存します。

変数 search_items は、検索項目を取得するために使用されます。 これは、最初の要素からその長さまで実行される for ループ内に配置されます。

検索される最初の要素は、例外処理ブロック内に配置される結果の説明です。

プログラムが説明を見つけた場合、それは変数 long_description に保存されます。 何も返されない場合、N/A が格納されます。

data = requests.get(url).json()
search_items = data.get("items")
for i, search_item in enumerate(search_items, start=1):
    try:
        long_description = search_item["pagemap"]["metatags"][0]["og:description"]
    except KeyError:
        long_description = "N/A"

以下のコードでは、各検索結果の属性がその名前の変数内に格納されます。 このプロセスは、検索結果ごとに 10 回繰り返されます。

title = search_item.get("title")
snippet = search_item.get("snippet")
html_snippet = search_item.get("htmlSnippet")
link = search_item.get("link")

最後に、すべての結果が出力されます。最初の行には結果の番号が出力され、その後にタイトル、説明などの属性が続きます。

print("=" * 10, f"Result #{i+start-1}", "=" * 10)
print("Title:", title)
print("Description:", snippet)
print("Long description:", long_description)
print("URL:", link, "\n")

結果は、外部依存関係を必要とせずに、Python で Google 検索 API を使用して出力されます。

出力:

Python によるカスタム検索 API の実装 - 出力 2

まとめ

この記事では、Python で Google 検索 API を使用してカスタム検索エンジンに検索クエリを送信するクライアントの作成について説明しました。 読者は、カスタム検索エンジンを作成し、API キーをフェッチし、検索リクエストを送信する Python スクリプトを簡単に作成できます。