Benutzerdefinierte Suchmaschine mit Google API in Python
- Erstellen Sie eine Suchmaschine mit der Google CSE-Plattform
- Implementieren Sie die benutzerdefinierte Such-API in Python
- Abschluss
In diesem Artikel wird das Erstellen einer benutzerdefinierten Suchmaschine (CSE) mithilfe der Google Search API in Python erläutert. Eine CSE ist eine Suchmaschine für Entwickler, die es ihnen ermöglicht, sie in jede Anwendung zu integrieren, einschließlich Websites, mobile Apps und andere Dinge.
Für das Web Scraping verwenden viele Apps die benutzerdefinierte Suchmaschine von Google. In diesem Artikel wird erläutert, wie Sie eine CSE einrichten und ihre Google-Such-API in Python verwenden.
Vom manuellen Scraping der Google-Suche wird dringend abgeraten, da die Suche alle paar Anfragen eingeschränkt wird.
Erstellen Sie eine Suchmaschine mit der Google CSE-Plattform
Die Verwendung einer Google-Such-API in Python zum Abrufen von Suchergebnissen ist ein dreistufiger Prozess. Im Gegensatz zum Web-Scraping, das Ergebnisse direkt aus der Google-Suche zurückgibt, erstellt diese Methode eine benutzerdefinierte Suchmaschine und verwendet sie, um Ergebnisse abzurufen.
Dies trägt dazu bei, die gleichen Ergebnisse wie beim Verschrotten ohne Schwellenwerte für das Senden von Anforderungen zu erzielen.
Um eine Suchmaschine zu erstellen, rufen Sie die Seite Programmierbare Suchmaschine
auf oder klicken Sie auf diesen Link. Geben Sie der Suchmaschine einen Namen und fügen Sie eine Beispiel-URL in Was soll gesucht werden?
ein.
Denken Sie daran, dass diese Beispiel-URL später geändert werden kann, und genau das werden wir tun.
Bestätigen Sie reCAPTCHA und klicken Sie auf Erstellen
, um eine benutzerdefinierte Suchmaschine zu erstellen. Diese Suchmaschine muss optimiert werden, um auf das gesamte Web zugreifen zu können.
Klicken Sie auf der nächsten Seite auf Anpassen
.
Unter Basis
sind einige wesentliche Daten zu finden, wie die Suchmaschinen-ID, die zum Versenden von Suchanfragen verwendet wird. Kopieren Sie die Suchmaschinen-ID und speichern Sie sie.
Scrollen Sie nach unten zu Suchfunktionen
und aktivieren Sie die Option Das gesamte Web durchsuchen
.
Aktivieren Sie im Abschnitt Zu durchsuchende Websites
das Kontrollkästchen der hinzugefügten URL und löschen Sie sie. Dadurch wird die Suchmaschine für das gesamte Web geöffnet.
Sobald die benutzerdefinierte Suchmaschine erstellt ist, ist es an der Zeit, die Google Search API in Python zu verwenden.
Zuerst müssen wir eine API für die erstellte Suchmaschine erhalten.
Holen Sie sich einen Google-API-Schlüssel
Die Application Programming Interface (API) von Google ist eine Funktion von Google Cloud zum Einbetten von Google-Diensten in Anwendungen von Drittanbietern. Ein Google-Projekt muss erstellt werden, um einen benutzerdefinierten Such-API-Schlüssel zu erhalten und ihn dann als Google-Such-API in Python zu verwenden.
Es gibt zwei Möglichkeiten, einen API-Schlüssel für die benutzerdefinierte Suchmaschine abzurufen:
- Erstellen Sie ein Projekt in Google Cloud und erhalten Sie eine Google Custom Search API.
- Holen Sie sich einen JSON-API-Schlüssel.
Für beide Schritte ist ein Google Cloud-Projekt erforderlich.
Erstellen Sie ein Projekt in Google Cloud und erhalten Sie eine Google Custom Search API
Wechseln Sie zur Seite credentials von Google Cloud. Klicken Sie anschliessend auf Neues Projekt
.
Benennen Sie es und lassen Sie die Organisationsbox so, wie sie ist. Klicken Sie anschliessend auf Erstellen
.
Nach dem Erstellen des Projekts müssen wir eine benutzerdefinierte Such-API an dieses Projekt anhängen. Wählen Sie im linken Seitenbereich Credentials
und klicken Sie dann oben auf die Schaltfläche Create Credentials
.
Wählen Sie unter Create Credentials
den API key
aus.
Durch Auswahl der Option API-Schlüssel
wird ein API-Schlüssel für das Projekt erstellt. Klicken Sie auf Schlüssel anzeigen
, um den API-Schlüssel zu kopieren.
Der von dieser Methode abgerufene API-Schlüssel ist inaktiv. Es kann manuell aktiviert werden, wenn das Python-Skript mit diesem API-Schlüssel ausgeführt wird.
Die Aufforderung zur Aktivierung wird von Python ausgelöst, wenn das Skript zum ersten Mal ausgeführt wird. Nach Aktivierung des API-Schlüssels kann die benutzerdefinierte Suchmaschine verwendet werden.
Holen Sie sich einen JSON-API-Schlüssel
Diese Methode ist relativ einfacher, da sie keine Aktivierung des Schlüssels erfordert. Der API-Schlüssel kann direkt von dieser Methode abgerufen werden, wenn bereits ein Google Cloud-Projekt vorhanden ist.
Rufen Sie die Leitseite der programmierbaren Suchmaschine Website auf.
Klicken Sie auf die Schaltfläche Get a key
, um ein Popup zu öffnen, in dem Sie aufgefordert werden, das Projekt auszuwählen.
Klicken Sie auf das Projekt und wählen Sie Weiter
, um eine API für das Projekt zu erstellen.
Klicken Sie auf Schlüssel anzeigen
, um den API-Schlüssel zu erhalten.
Dieser JSON-API-Schlüssel kann direkt verwendet werden, während der manuell über die Registerkarte Credentials
in der Google Cloud abgerufene API-Schlüssel aktiviert werden muss.
Implementieren Sie die benutzerdefinierte Such-API in Python
Nachdem die CSE-ID und der API-Schlüssel fertig sind, kann die Google-Such-API in Python in Skripten verwendet werden. Es gibt zwei Programme unten, die den Prozess erklären.
Beispiel 1:
Damit die Google-Suche-API in Python funktioniert, benötigen wir eine Python-Bibliothek zum Parsen des API-Schlüssels. Wir können den Google API Python Client verwenden.
Um es zu installieren, gehen Sie zu CMD oder einer beliebigen IDE, die Python ausführt, und installieren Sie den Google API Python Client.
Schreiben Sie in CMD den Befehl:
pip install google-api-python-client
Dadurch wird das Python-Paket im System installiert.
Es muss ein Python-Skript erstellt werden, das Suchanfragen an die benutzerdefinierte Suchmaschine sendet und das Ergebnis zurückgibt.
Code- 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)
Lassen Sie uns den Code aufschlüsseln, um zu verstehen, was er tut. Die erste Codezeile importiert das Modul build
aus dem Python-Bibliothekspaket google api python client
.
Zwei Objektvariablen, my_api_key
und my_cse_id
, wurden erstellt, die den API-Schlüssel bzw. die benutzerdefinierte Suchmaschinen-ID speichern.
Eine Methode google_search
wird mit vier Parametern erstellt: search_term
, der die Suchanfrage speichert, api_key
zum Übergeben des API-Schlüssels, cse_id
zum Übergeben der ID der benutzerdefinierten Suchmaschine und schließlich das Keyword-Argument **kwargs
.
Der folgende Code erstellt eine Variable service
, die die build
-Funktion verwendet, um einen customsearch
-API-Dienst zu erstellen, der an die benutzerdefinierte Suchmaschine angepasst wird.
service = build("customsearch", "v1", developerKey=api_key)
Die nächste Zeile verwendet das Modul service.cse()
, um einen Client zu erstellen, der Suchanfragen an die benutzerdefinierte Suchmaschine sendet und in der Variablen rex
speichert.
Die list(q=search_term, cx=cse_id, **kwargs)
erstellt eine Liste der vom Suchbegriff abgerufenen Ergebnisse, wobei **kwargs
verwendet wird, um die Anzahl der zurückgegebenen Suchbegriffe zu begrenzen Klient.
res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute()
Zuletzt wird die Variable rex
als Array mit der Suchergebnisliste zurückgegeben.
Abschließend wird eine Variable result
erstellt, um die Suchergebnisse zu speichern. Die Methode google_search
wird mit der Suchanfrage als erstem Parameter aufgerufen. Dann der API-Schlüssel, die CSE-ID und die Anzahl der Suchiterationen für die folgenden Parameter.
Die zurückgegebene Liste wird in der Variablen result
gespeichert. Innerhalb einer for
-Schleife wird es bis zu seiner Länge gedruckt.
results = google_search('"How to code in Python"', my_api_key, my_cse_id, num=10)
for result in results:
print(result)
Ausgang:
Beispiel 2:
In diesem Beispiel erstellen wir ein Python-Skript, das Suchanfragen sendet, ohne eine externe Abhängigkeit zu verwenden. Dieses Programm verwendet den API-Schlüssel und die CSE-ID und erstellt einen Client, der die integrierten Python-Bibliotheken zusammen mit der Google-Such-API in Python verwendet.
Code:
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")
Lassen Sie uns verstehen, was der obige Code tut.
Die erste Zeile importiert die Python-HTTP-Bibliothek requests
. Initialisiert werden die beiden Variablen API_KEY
und SEARCH_ENGINE_ID
, die die zuvor erstellten Credentials speichern.
import requests
API_KEY = "Your API Key"
SEARCH_ENGINE_ID = "Your CSE ID"
Die Variable query
wird verwendet, um den Suchbegriff zu speichern, nach dem die Anwendung suchen wird. Die Variable page
zeigt das Suchergebnis von einer bestimmten Seite, während die Variable start
die Reihenfolge der Ergebnisse von dieser Seite angibt.
Beispielsweise hat jede Seite 10 Suchergebnisse. Wenn die Variable start
page = 1
hat, werden die ersten 10 Suchergebnisse angezeigt, also die erste Seite, während page = 2
Suchergebnisse gefolgt vom 10. Ergebnis anzeigt, was bedeutet, dass Ergebnisse ab dem 11. angezeigt werden .
Die Variable url
speichert die Dienst-URL, die zum Abrufen der Suchergebnisse von der benutzerdefinierten Suchmaschine verwendet wird. Es speichert die Anmeldeinformationen wie den API-Schlüssel, die Suchanfrage und die Seitenzahl der anzuzeigenden Suchergebnisse.
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}"
Dieses Programm sendet einen API-Request mit der Funktion requests
an die hinterlegte URL und speichert die vom API-Aufruf zurückgelieferten Daten in der Variable data
.
Die Variable search_items
wird verwendet, um die Suchbegriffe zu erhalten. Es wird in eine for
-Schleife eingefügt, beginnend mit dem ersten Element und bis zu seiner Länge.
Das erste Element, nach dem gesucht wird, ist die Ergebnisbeschreibung, die in einen Ausnahmebehandlungsblock eingefügt wird.
Wenn das Programm eine Beschreibung findet, wird sie in der Variablen long_description
gespeichert. Falls nichts zurückgegeben wird, speichert es 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"
Im folgenden Code werden die Attribute jedes Suchergebnisses in der Variablen seines Namens gespeichert. Dieser Vorgang wird für jedes Suchergebnis zehnmal wiederholt.
title = search_item.get("title")
snippet = search_item.get("snippet")
html_snippet = search_item.get("htmlSnippet")
link = search_item.get("link")
Schließlich werden alle Ergebnisse gedruckt – die erste Zeile druckt die Nummer des Ergebnisses, gefolgt von Attributen wie Titel, Beschreibung usw.
print("=" * 10, f"Result #{i+start-1}", "=" * 10)
print("Title:", title)
print("Description:", snippet)
print("Long description:", long_description)
print("URL:", link, "\n")
Die Ergebnisse werden mithilfe der Google-Such-API in Python gedruckt, ohne dass eine externe Abhängigkeit erforderlich ist.
Ausgang:
Abschluss
In diesem Artikel wurde das Erstellen eines Clients erläutert, der Suchanfragen mithilfe der Google-Such-API in Python an eine benutzerdefinierte Suchmaschine sendet. Der Leser wäre in der Lage, eine benutzerdefinierte Suchmaschine zu erstellen, API-Schlüssel abzurufen und auf einfache Weise Python-Skripte zu erstellen, die Suchanfragen senden.