Benutzerdefinierte Suchmaschine mit Google API in Python

Jay Shaw 15 Februar 2024
  1. Erstellen Sie eine Suchmaschine mit der Google CSE-Plattform
  2. Implementieren Sie die benutzerdefinierte Such-API in Python
  3. Abschluss
Benutzerdefinierte Suchmaschine mit Google API in Python

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.

CSE erstellen

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.

CSE ändern

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:

  1. Erstellen Sie ein Projekt in Google Cloud und erhalten Sie eine Google Custom Search API.
  2. 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.

Google Cloud – Neues Projekt

Benennen Sie es und lassen Sie die Organisationsbox so, wie sie ist. Klicken Sie anschliessend auf Erstellen.

Google Cloud – Klicken Sie 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.

Google Cloud – Anmelde-API-Schlüssel

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.

Google Cloud – API-Schlüssel erstellt

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.

Google Cloud – JSON-API-Schlüssel abrufen

Klicken Sie auf das Projekt und wählen Sie Weiter, um eine API für das Projekt zu erstellen.

JSON-API – Projekt auswählen

Klicken Sie auf Schlüssel anzeigen, um den API-Schlüssel zu erhalten.

Google Cloud – JSON-API-Schlüssel anzeigen

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:

Python Implementieren Sie die benutzerdefinierte Such-API – Ausgabe 1

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:

Python Implementieren Sie die benutzerdefinierte Such-API – Ausgabe 2

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.