Motor de búsqueda personalizado que utiliza la API de Google en Python

Jay Shaw 15 febrero 2024
  1. Crear un motor de búsqueda utilizando la plataforma CSE de Google
  2. Implementar la API de búsqueda personalizada en Python
  3. Conclusión
Motor de búsqueda personalizado que utiliza la API de Google en Python

El artículo explica cómo crear un motor de búsqueda personalizado (CSE) usando la API de búsqueda de Google en Python. Un CSE es un motor de búsqueda diseñado para desarrolladores que les permite incorporarlo en cualquier aplicación, incluidos sitios web, aplicaciones móviles y otras cosas.

Para el web scraping, muchas aplicaciones utilizan el motor de búsqueda personalizado de Google. Este artículo explicará cómo configurar un CSE y usar su API de búsqueda de Google en Python.

Se desaconseja raspar manualmente la Búsqueda de Google porque la búsqueda se restringe después de algunas solicitudes.

Crear un motor de búsqueda utilizando la plataforma CSE de Google

El uso de una API de búsqueda de Google en Python para obtener resultados de búsqueda es un proceso de tres niveles. A diferencia del web scrapping, que devuelve resultados directamente de la búsqueda de Google, este método crea un motor de búsqueda personalizado y lo utiliza para obtener resultados.

Esto ayuda a obtener los mismos resultados que el desguace sin umbrales para el envío de solicitudes.

Para crear un motor de búsqueda, busque la página motor de búsqueda programable o haga clic en este enlace. Dé un nombre para el motor de búsqueda y agregue una URL de muestra dentro de “¿Qué buscar?”.

Recuerde que esta URL de muestra se puede cambiar más tarde, y eso es lo que haremos.

Confirme reCAPTCHA y haga clic en Crear para crear un motor de búsqueda personalizado. Este motor de búsqueda debe modificarse para acceder a toda la web.

Haga clic en Personalizar en la página siguiente.

Crear CSE

En Básico, se pueden encontrar algunos datos esenciales, como el ID del motor de búsqueda, que se utilizará para enviar solicitudes de búsqueda. Copie el ID del motor de búsqueda y guárdelo.

Desplácese hacia abajo hasta Características de búsqueda y active la opción Buscar en toda la web.

En la sección Sitios para buscar, marque la casilla de verificación de la URL añadida y elimínela. Esto hará que el buscador se abra a toda la web.

Modificar CSE

Una vez que se crea el motor de búsqueda personalizado, es hora de usar la API de búsqueda de Google en Python.

Primero, necesitamos obtener una API para el motor de búsqueda creado.

Obtener una clave API de Google

La interfaz de programación de aplicaciones (API) de Google es una función de Google Cloud para integrar los servicios de Google en aplicaciones de terceros. Se debe crear un proyecto de Google para obtener una clave API de búsqueda personalizada y luego usarla como una API de búsqueda de Google en Python.

Hay dos formas de obtener una clave de API para el motor de búsqueda personalizado:

  1. Cree un proyecto en Google Cloud y obtenga una API de búsqueda personalizada de Google.
  2. Obtenga una clave API JSON.

Ambos pasos requieren un proyecto de Google Cloud.

Cree un proyecto en Google Cloud y obtenga una API de búsqueda personalizada de Google

Dirígete a la página credenciales de Google Cloud. Luego, haga clic en Nuevo Proyecto.

Google Cloud: nuevo proyecto

Nómbrelo y deje el cuadro de organización como está. Luego, haga clic en Crear.

Google Cloud: haga clic en Crear

Después de crear el proyecto, debemos adjuntar una API de búsqueda personalizada a este proyecto. En el panel lateral izquierdo, seleccione Credenciales y luego haga clic en el botón Crear credenciales en la parte superior.

Dentro de Crear Credenciales, selecciona la Clave API.

Google Cloud: clave de API de credenciales

Al seleccionar la opción Clave API se creará una clave API para el proyecto. Haga clic en Mostrar clave para copiar la clave API.

Google Cloud: clave de API creada

La clave API obtenida de este método está inactiva. Se puede activar manualmente cuando se ejecuta el script de Python con esta clave API.

Python lanza el aviso de activación cuando el script se ejecuta por primera vez. Después de activar la clave API, se puede utilizar el motor de búsqueda personalizado.

Obtenga una clave API JSON

Este método es relativamente más simple ya que no requiere la activación de la clave. La clave API se puede obtener directamente de este método si ya existe un proyecto de Google Cloud.

Ir a la página de guía del motor de búsqueda programable sitio web.

Haga clic en el botón Obtener una clave para abrir una ventana emergente que le pide que elija el proyecto.

Google Cloud - API JSON Obtener clave

Haga clic en el proyecto y seleccione Siguiente para crear una API para el proyecto.

API JSON - Seleccionar proyecto

Haga clic en Mostrar clave para obtener la clave API.

Google Cloud - Mostrar clave de API JSON

Esta clave API JSON se puede usar directamente, mientras que la clave API obtenida manualmente a través de la pestaña “Credenciales” en Google Cloud debe activarse.

Implementar la API de búsqueda personalizada en Python

Una vez que la ID de CSE y la clave de API están listas, la API de búsqueda de Google en Python se puede usar dentro de los scripts. Hay dos programas a continuación que explicarán el proceso.

Ejemplo 1:

Para que funcione la API de búsqueda de Google en Python, necesitamos una biblioteca de Python para analizar la clave API. Podemos usar el cliente Python de la API de Google.

Para instalarlo, vaya a CMD o cualquier IDE que ejecute Python e instale el cliente Python API de Google.

Dentro de CMD, escribe el comando:

pip install google-api-python-client

Esto instalará el paquete de Python en el sistema.

Se debe crear una secuencia de comandos de Python que envíe consultas de búsqueda al motor de búsqueda personalizado y devuelva el resultado.

Código- 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)

Analicemos el código para entender lo que hace. La primera línea de código importa el módulo build del paquete de la biblioteca de Python google api python client.

Se han creado dos variables de objeto, my_api_key y my_cse_id, que almacenan la clave API y el ID del motor de búsqueda personalizado, respectivamente.

Se crea un método google_search con cuatro parámetros: search_term, que almacena la consulta de búsqueda, api_key para pasar la clave API, cse_id para pasar el ID del motor de búsqueda personalizado y, por último, el argumento de palabra clave **kwargs.

El siguiente código crea un “servicio” variable que utiliza la función “construir” para crear un servicio API de “búsqueda personalizada” que se ajustará al motor de búsqueda personalizado.

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

La siguiente línea usa el módulo service.cse() para crear un cliente que enviará consultas de búsqueda al motor de búsqueda personalizado y las almacenará en la variable rex.

La lista(q=término_búsqueda, cx=id_cse, **kwargs) crea una lista de los resultados extraídos del término de búsqueda, donde **kwargs se utiliza para poner un límite al número de términos de búsqueda devueltos por el cliente.

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

Por último, la variable rex se devuelve como una matriz con la lista de resultados de búsqueda.

Finalmente, se crea una variable resultado para almacenar los resultados de la búsqueda. Se llama al método google_search con la consulta de búsqueda como primer parámetro. Luego, su clave de API, ID de CSE y el número de iteraciones de búsqueda para los siguientes parámetros.

La lista devuelta se almacena dentro de la variable resultado. Dentro de un bucle for, se imprime hasta su longitud.

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

Producción:

Python Implementar la API de búsqueda personalizada - Salida 1

Ejemplo 2:

En este ejemplo, crearemos un script de Python que envíe solicitudes de búsqueda sin utilizar ninguna dependencia externa. Este programa usará la clave de API y la ID de CSE y creará un cliente que use las bibliotecas de Python incorporadas junto con la API de búsqueda de Google en Python.

Código:

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")

Entendamos lo que hace el código anterior.

La primera línea importa las solicitudes de la biblioteca HTTP de Python. Se inicializan las dos variables, API_KEY y SEARCH_ENGINE_ID, que almacenan las credenciales creadas anteriormente.

import requests

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

La variable consulta se utiliza para almacenar el término de búsqueda que buscará la aplicación. La variable página muestra el resultado de la búsqueda de una página en particular, mientras que la variable inicio indica la secuencia de resultados de esa página.

Por ejemplo, cada página tiene 10 resultados de búsqueda. Si la variable inicio tiene página = 1, mostrará los primeros 10 resultados de búsqueda, es decir, la primera página, mientras que página = 2 mostrará los resultados de búsqueda seguidos del décimo resultado, lo que significa que los resultados comienzan desde el 11. .

La variable url almacena la URL del servicio utilizada para obtener los resultados de búsqueda del motor de búsqueda personalizado. Almacena las credenciales como la clave API, la consulta de búsqueda y el número de página de los resultados de búsqueda que se mostrarán.

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}"

Este programa envía una solicitud de API utilizando la función solicitudes a la URL almacenada y guarda los datos devueltos por la llamada API en la variable datos.

La variable search_items se utiliza para obtener los elementos de búsqueda. Se coloca dentro de un ciclo for que comienza desde el primer elemento y continúa hasta su longitud.

El primer elemento que se busca es la descripción del resultado, que se coloca dentro de un bloque de manejo de excepciones.

Si el programa encuentra alguna descripción, se almacena dentro de la variable long_description. En caso de que no se devuelva nada, almacena 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"

En el siguiente código, los atributos de cada resultado de búsqueda se almacenan dentro de la variable de su nombre. Este proceso se repite 10 veces para cada resultado de búsqueda.

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

Finalmente, se imprimen todos los resultados: la primera línea imprime el número del resultado seguido de atributos como título, descripción, etc.

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

Los resultados se imprimen utilizando la API de búsqueda de Google en Python sin necesidad de dependencia externa.

Producción:

Python Implementar la API de búsqueda personalizada - Salida 2

Conclusión

Este artículo ha explicado la creación de un cliente que envía consultas de búsqueda a un motor de búsqueda personalizado utilizando la API de búsqueda de Google en Python. El lector podría crear un motor de búsqueda personalizado, obtener claves API y crear fácilmente secuencias de comandos de Python que envíen solicitudes de búsqueda.