Last Updated on mayo 14, 2024 by Álvaro
Utilizando la librería Beautiful Soup de Python he confeccionado un scraper de resultados de búsqueda de Google (SERPs). Introduciendo una keyword, se obtiene como resultado las 10 primeras URLs ordenadas según posición y sus metadatos (title y metadescription).
Herramientas necesarias
Para este proyecto, utilizaremos las siguientes librerías de Python:
- Requests: Para realizar solicitudes HTTP.
- Beautiful Soup: Para analizar y extraer datos del HTML.
Puedes instalar estas librerías utilizando pip:
pip install requests beautifulsoup4
Implementación del Scraper
A continuación, presentamos el código del scraper que realiza una búsqueda en Google, extrae los títulos y enlaces de los resultados, y luego accede a cada enlace para extraer la metadescripción.
import requests from bs4 import BeautifulSoup def google_search(query): query = query.replace(' ', '+') url = f"https://www.google.com/search?q={query}&num=10&gl=es&hl=es" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } response = requests.get(url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') results = [] for g in soup.find_all('div', class_='g'): title = g.find('h3').text if g.find('h3') else None link = g.find('a')['href'] if g.find('a') else None if title and link: description = get_meta_description(link) results.append({ 'title': title, 'link': link, 'description': description }) return results else: print("Error al realizar la solicitud") return None def get_meta_description(url): try: headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } response = requests.get(url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') meta = soup.find('meta', attrs={'name': 'description'}) if meta: return meta['content'] else: return "No hay metadescripción disponible" else: return "No se pudo acceder a la página" except Exception as e: return str(e) keyword = input("Introduce la palabra clave para buscar en Google: ") results = google_search(keyword) if results: for idx, result in enumerate(results): print(f"Resultado {idx + 1}:") print(f"Título: {result['title']}") print(f"Enlace: {result['link']}") print(f"Metadescripción: {result['description']}") print("\n")
Descripción del Proceso
- Búsqueda en Google: El script realiza una búsqueda en Google con la palabra clave proporcionada y obtiene el HTML de la página de resultados de búsqueda.
- Extracción de Títulos y Enlaces: Utiliza Beautiful Soup para extraer el título y el enlace de cada resultado de búsqueda.
- Solicitud Adicional para Cada Enlace: Para cada enlace en los resultados, el script realiza una solicitud adicional para obtener el HTML de la página de destino para poder extraer las metadescripciones.
- Extracción de Metadescripciones: Utiliza Beautiful Soup para extraer la metadescripción de la página de destino buscando la etiqueta
<meta name="description">
. - Visualización de Resultados: Muestra en la consola el título, el enlace y la metadescripción de cada resultado.
La salida que se obtiene es la siguiente:
Consideraciones
La URL por defecto de búsqueda es para las SERPs de España. Para modificar el país o el idioma tendrás que modificar los atributos gl=es&hl=es.
url = f"https://www.google.com/search?q={query}&num=10&gl=es&hl=es"
Muy bueno! Gracias por compartirlo
Buenísimo. Gracias por toda la data. Seguí así crack