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!
Índice
TogglePaso 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.