Cómo Realizar Web Scraping de Resultados de Búsqueda de Google con Python

Picture of José Mª Díaz Pérez
José Mª Díaz Pérez

Comparte en

En este post, te mostraremos cómo crear un script en Python que realice web scraping de los resultados de búsqueda de Google y guarde los datos en un archivo Excel. Utilizaremos varias bibliotecas populares como selenium, beautifulsoup4 y openpyxl. ¡Vamos paso a paso!

Paso 1: Instalación de las Bibliotecas Necesarias

Primero, necesitamos instalar las bibliotecas necesarias. Abre tu terminal y ejecuta los siguientes comandos:

pip install selenium beautifulsoup4 openpyxl webdriver-manager

Paso 2: Importar las Bibliotecas

Vamos a importar todas las bibliotecas que necesitaremos para nuestro script.

import time
import random
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import openpyxl
import os

Paso 3: Configurar el Navegador

Para simular el comportamiento de un usuario real y evitar ser bloqueados por Google, usaremos diferentes agentes de usuario (User-Agents). También ejecutaremos Chrome en modo “headless”, lo que significa que se ejecutará en segundo plano sin abrir una ventana del navegador.

# Lista de User-Agents
USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36",
]

def setup_driver():
    chrome_options = Options()
    chrome_options.add_argument("--headless")  # Ejecuta Chrome en modo headless
    chrome_options.add_argument(f"user-agent={random.choice(USER_AGENTS)}")
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
    return driver

Paso 4: Scraping de Resultados de Búsqueda de Google

Definiremos una función para realizar una búsqueda en Google y extraer los resultados usando Selenium y BeautifulSoup.

def scrape_google_search(keyword):
    search_url = f"https://www.google.com/search?q={keyword}"
    driver = setup_driver()
    driver.get(search_url)
    
    time.sleep(5)  # Esperar a que el contenido dinámico se cargue completamente
    
    soup = BeautifulSoup(driver.page_source, "html.parser")
    
    results = []
    
    for result in soup.select('.tF2Cxc'):
        title = result.select_one('.DKV0Md').text if result.select_one('.DKV0Md') else "N/A"
        url = result.select_one('.yuRUbf a')['href'] if result.select_one('.yuRUbf a') else "N/A"
        snippet = result.select_one('.aCOpRe').text if result.select_one('.aCOpRe') else "N/A"
        
        results.append({
            'title': title,
            'url': url,
            'snippet': snippet
        })
        
        print(f"Title: {title}")
        print(f"URL: {url}")
        print(f"Snippet: {snippet}")
        print()
    
    driver.quit()
    return results

Paso 5: Guardar los Datos en un Archivo Excel

Ahora, necesitamos guardar los datos extraídos en un archivo Excel usando openpyxl.

def save_to_excel(data, filename):
    wb = openpyxl.Workbook()
    ws = wb.active
    ws.append(["Title", "URL", "Snippet"])
    
    for entry in data:
        ws.append([entry['title'], entry['url'], entry['snippet']])
    
    try:
        wb.save(filename)
        print(f"Datos guardados en {filename}")
    except PermissionError:
        print(f"Error: No se pudo guardar el archivo {filename}. Asegúrate de que no esté abierto en otra aplicación y tienes permisos suficientes.")

Paso 6: Ejecución del Script

Finalmente, ejecutamos el script con un término de búsqueda específico y guardamos los resultados en un archivo Excel.

# Parámetros de búsqueda
keyword = "restaurant in Madrid"

# Scraping
results = scrape_google_search(keyword)

# Guardar en un archivo Excel
output_directory = r"Aquí incluye tu ruta para guardar los archivos"
if not os.path.exists(output_directory):
    os.makedirs(output_directory)

output_file = os.path.join(output_directory, "google_search_results.xlsx")

# Guardar en un archivo Excel
save_to_excel(results, output_file)

Conclusión

Este script realiza web scraping de los resultados de búsqueda de Google utilizando Selenium para simular un navegador web y BeautifulSoup para analizar el contenido HTML. Los resultados se guardan en un archivo Excel para su posterior análisis.

Recuerda que el scraping de contenido puede estar sujeto a las políticas de uso del sitio web, así que asegúrate de cumplir con las normativas y términos de servicio del sitio que estás scrapeando.

¡Esperamos que este tutorial te haya sido útil! Si tienes alguna pregunta, no dudes en dejarla en los comentarios.

¿Quieres impulsar tu negocio hoy mismo?

Cuéntanos un poco de tu proyecto