Motor de búsqueda personalizado que utiliza la API de Google en Python
- Crear un motor de búsqueda utilizando la plataforma CSE de Google
- Implementar la API de búsqueda personalizada en Python
- Conclusión
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.
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.
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:
- Cree un proyecto en Google Cloud y obtenga una API de búsqueda personalizada de Google.
- 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
.
Nómbrelo y deje el cuadro de organización como está. Luego, 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
.
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.
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.
Haga clic en el proyecto y seleccione Siguiente
para crear una API para el proyecto.
Haga clic en Mostrar clave
para obtener la clave API.
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:
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:
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.