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 を確認し、[作成] をクリックしてカスタム検索エンジンを作成します。 この検索エンジンは、ウェブ全体にアクセスできるように微調整する必要があります。
次のページでカスタマイズ
をクリックします。
Basic
の下には、検索リクエストの送信に使用される検索エンジン ID などのいくつかの重要なデータがあります。 検索エンジン ID をコピーして保存します。
検索機能
まで下にスクロールし、ウェブ全体を検索
オプションをオンにします。
検索するサイト
セクションで、追加した URL のチェックボックスをオンにして削除します。 これにより、検索エンジンがウェブ全体に開かれます。
カスタム検索エンジンを作成したら、Python で Google 検索 API を使用します。
まず、作成した検索エンジンの API を取得する必要があります。
Google API キーを取得する
Google のアプリケーション プログラミング インターフェース (API) は、Google サービスをサードパーティ アプリケーションに埋め込むための Google Cloud の機能です。 カスタム検索 API キーを取得し、それを Python で Google 検索 API として使用するには、Google プロジェクトを作成する必要があります。
カスタム検索エンジンの API キーを取得するには、次の 2つの方法があります。
- Google Cloud でプロジェクトを作成し、Google Custom Search API を取得します。
- JSON API キーを取得します。
どちらのステップにも Google Cloud プロジェクトが必要です。
Google Cloud でプロジェクトを作成し、Google Custom Search API を取得する
Google Cloud の credentials ページに移動します。 次に、新しいプロジェクト
をクリックします。
名前を付けて、編成ボックスをそのままにしておきます。 次に、作成
をクリックします。
プロジェクトを作成したら、カスタム検索 API をこのプロジェクトにアタッチする必要があります。 左側のパネルで資格情報
を選択し、上部の資格情報の作成
ボタンをクリックします。
Create Credentials
内で、API キー
を選択します。
API キー
オプションを選択すると、プロジェクトの API キーが作成されます。 Show key
をクリックして API キーをコピーします。
このメソッドからフェッチされた API キーは非アクティブです。 この API キーを持つ Python スクリプトを実行すると、手動でアクティブ化できます。
スクリプトが初めて実行されるときに、アクティベーションのプロンプトが Python によってスローされます。 API キーを有効化すると、カスタム検索エンジンを使用できるようになります。
JSON API キーを取得する
この方法は、キーのアクティベーションを必要としないため、比較的簡単です。 Google Cloud プロジェクトがすでに存在する場合、API キーはこのメソッドから直接取得できます。
プログラマブル検索エンジンの案内ページwebsiteへ。
キーを取得
ボタンをクリックして、プロジェクトの選択を求めるポップアップを開きます。
プロジェクトをクリックして次へ
を選択し、プロジェクトの API を作成します。
Show key
をクリックして 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_key
と my_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)
出力:
例 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_KEY
と SEARCH_ENGINE_ID
の 2つの変数が初期化され、以前に作成された資格情報が保存されます。
import requests
API_KEY = "Your API Key"
SEARCH_ENGINE_ID = "Your CSE ID"
変数 query
は、アプリケーションが検索する検索語を格納するために使用されます。 変数 page
は特定のページからの検索結果を表示し、変数 start
はそのページからの一連の結果を示します。
たとえば、各ページには 10 件の検索結果があります。 変数 start
に page = 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 で Google 検索 API を使用してカスタム検索エンジンに検索クエリを送信するクライアントの作成について説明しました。 読者は、カスタム検索エンジンを作成し、API キーをフェッチし、検索リクエストを送信する Python スクリプトを簡単に作成できます。