Volver al blog
Guías y tutoriales2026-03-15·11 min de lectura

Guía Google Maps Python Selenium: extraer datos

Por Ibrahim DemolCEO IBLeadActualizado el 15 de marzo de 2026

¿Quieres extraer datos de Google Maps con Python y Selenium? Esta guía cubre todo: la preparación del entorno, la escritura del script, las trampas a evitar. La palabra clave guia google maps python selenium extraer aparece con frecuencia en las búsquedas de desarrolladores que desean automatizar la recolección de datos locales — y con razón. Google Maps contiene millones de fichas de negocios con direcciones, teléfonos, calificaciones y horarios. Toda esta información es útil para la prospección, estudios de mercado o análisis de la competencia.


¿Por qué combinar Python y Selenium para scraper Google Maps?

Python es el lenguaje de referencia para el web scraping. Su sintaxis es clara, su comunidad es masiva, y sus bibliotecas cubren todas las necesidades: manipulación de datos con Pandas, solicitudes HTTP con Requests, análisis HTML con BeautifulSoup.

Pero Google Maps presenta un problema específico. Gran parte de los datos no está en el HTML estático. La información se muestra después de interacciones del usuario: clic en una ficha, desplazamiento en la lista, apertura de un panel lateral. Un simple requests.get() no es suficiente.

Ahí es donde entra Selenium. Selenium controla un verdadero navegador (Chrome, Firefox, Edge) y simula el comportamiento de un usuario real. Puede hacer clic, desplazarse, esperar a que aparezca un elemento y extraer el contenido renderizado dinámicamente. Combinado con Python, se convierte en una herramienta sólida para automatizar la extracción de datos en interfaces web complejas como Google Maps.


Preparar el entorno de desarrollo

Antes de escribir la más mínima línea de código, es necesario instalar las herramientas adecuadas.

1. Instalar Python

Descarga la última versión estable de Python en python.org. Al instalar en Windows, asegúrate de marcar la opción "Add Python to PATH" — sin eso, los comandos pip no funcionarán en la terminal.

Verifica la instalación con:

python --version

2. Instalar Selenium

Abre tu terminal o símbolo del sistema y escribe:

pip install selenium

Selenium se instala en unos segundos. También necesitarás Pandas para organizar los datos:

pip install pandas

3. Descargar el WebDriver

Selenium necesita un WebDriver para controlar tu navegador. El WebDriver es un ejecutable que hace el enlace entre tu script de Python y el navegador.

La versión del WebDriver debe coincidir exactamente con la versión de tu navegador. Verifica tu versión de Chrome en chrome://settings/help y descarga el ChromeDriver correspondiente.

Desde Selenium 4.6+, también puedes usar selenium-manager que gestiona la descarga automáticamente. Práctico para evitar errores de versión.


Comprender la estructura de Google Maps antes de scraper

Antes de escribir el script, tómate 5 minutos para inspeccionar Google Maps en las herramientas de desarrollador de tu navegador (F12).

Aquí está lo que observarás:

  • La lista de resultados está en un contenedor desplazable con una clase CSS específica
  • Cada ficha de negocio es un elemento clicable
  • Los detalles (teléfono, sitio web, horarios) solo aparecen después de hacer clic en una ficha
  • Google Maps carga los resultados en lazy loading — los elementos al final de la lista no existen en el DOM hasta que no hayas desplazado

Estos comportamientos dinámicos explican por qué Selenium es necesario. También explican por qué el scraping de Google Maps es técnicamente más complejo que un sitio estático.

Atención: Google Maps limita los resultados a 120 fichas por búsqueda. Si tu área geográfica contiene más de 120 negocios en una categoría, deberás dividir tu búsqueda (por distrito, por código postal, etc.) para cubrir la totalidad.


Escribir el script Python Selenium para Google Maps

A continuación, un ejemplo funcional que busca restaurantes en una ciudad y extrae sus direcciones.

Estructura del script

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import pandas as pd

# Lanzar el navegador Chrome
driver = webdriver.Chrome()
driver.get("https://www.google.com/maps")

# Esperar a que la página cargue
time.sleep(3)

# Ingresar la consulta de búsqueda
search_bar = driver.find_element(By.NAME, "q")
search_bar.send_keys("Restaurantes París 11")
search_bar.send_keys(Keys.ENTER)

# Esperar los resultados
time.sleep(5)

# Desplazarse en la lista para cargar más resultados
results_panel = driver.find_element(By.CSS_SELECTOR, "div[role='feed']")
for _ in range(5):
    driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", results_panel)
    time.sleep(2)

# Extraer las fichas
results = driver.find_elements(By.CSS_SELECTOR, "div.Nv2PK")
addresses = []

for result in results:
    try:
        name = result.find_element(By.CSS_SELECTOR, ".qBF1Pd").text
        address_elements = result.find_elements(By.CSS_SELECTOR, ".W4Efsd span")
        address = " ".join([el.text for el in address_elements if el.text])
        addresses.append({"Nombre": name, "Dirección": address})
    except Exception:
        pass

# Exportar a CSV
df = pd.DataFrame(addresses)
df.to_csv("restaurantes_paris.csv", index=False, encoding="utf-8-sig")
print(f"{len(addresses)} restaurantes extraídos.")

# Cerrar el navegador
driver.quit()

Lo que hace este script, paso a paso

Paso 1 — Lanzar Chrome: webdriver.Chrome() abre una ventana de Chrome controlada por Selenium. La verás abrirse en tu pantalla.

Paso 2 — Navegar hacia Google Maps: driver.get() carga la página. El time.sleep(3) da tiempo para que el JavaScript se ejecute.

Paso 3 — Iniciar la búsqueda: El script encuentra la barra de búsqueda por su atributo name="q", escribe la consulta y presiona Enter.

Paso 4 — Desplazarse: El bucle desplaza el panel de resultados 5 veces para activar el lazy loading y cargar más fichas.

Paso 5 — Extraer: Para cada ficha encontrada, el script recupera el nombre y la dirección. El bloque try/except evita que el script falle si falta un elemento.

Paso 6 — Exportar: Pandas organiza los datos en un DataFrame y los guarda en CSV. La codificación utf-8-sig garantiza que los caracteres especiales (acentos, etc.) se muestren correctamente en Excel.


Extraer datos adicionales: teléfono, sitio web, calificación

Para recuperar el teléfono, el sitio web y la calificación de Google, es necesario hacer clic en cada ficha y esperar a que se abra el panel de detalles.

for result in results:
    try:
        result.click()
        time.sleep(3)  # Esperar el panel de detalles
        
        # Calificación de Google
        try:
            rating = driver.find_element(By.CSS_SELECTOR, "span.MW4etd").text
        except:
            rating = ""
        
        # Teléfono
        try:
            phone = driver.find_element(
                By.CSS_SELECTOR, 
                "button[data-item-id^='phone'] span.Io6YTe"
            ).text
        except:
            phone = ""
        
        # Sitio web
        try:
            website = driver.find_element(
                By.CSS_SELECTOR, 
                "a[data-item-id='authority']"
            ).get_attribute("href")
        except:
            website = ""
            
        addresses.append({
            "Nombre": name,
            "Teléfono": phone,
            "Sitio web": website,
            "Calificación": rating
        })
        
    except Exception:
        pass

Este código es más lento. Cada clic + espera toma de 3 a 5 segundos. Para 100 fichas, cuenta con un mínimo de 5 a 8 minutos de ejecución.


Los selectores CSS de Google Maps se rompen regularmente

Este es el problema número uno del scraping de Google Maps con Selenium. Google modifica sus clases CSS sin previo aviso. Un script que funciona hoy puede devolver cero resultados mañana.

Algunas buenas prácticas para limitar los daños:

Usa atributos estables: Los atributos data-item-id, aria-label, y role cambian menos a menudo que las clases CSS generadas automáticamente.

Agrega logs: Muestra el número de elementos encontrados en cada paso. Si un selector devuelve 0 resultados, lo sabrás de inmediato.

Versiona tu script: Guarda las versiones antiguas. Cuando Google rompa tus selectores, podrás comparar e identificar lo que ha cambiado.

Prueba con driver.page_source: Guarda el HTML de la página para inspeccionarlo fuera de línea cuando algo no funcione.


Manejar las restricciones y los CAPTCHA

Google detecta comportamientos automatizados. Aquí están las señales que desencadenan bloqueos:

  • Demasiadas solicitudes desde la misma IP en poco tiempo
  • Sin retraso entre las acciones (comportamiento no humano)
  • User-agent faltante o genérico
  • Ausencia de cookies de sesión

Estrategias para reducir los bloqueos

Agregar retrasos aleatorios: Reemplaza time.sleep(3) por time.sleep(random.uniform(2, 5)). Los retrasos fijos son más fácilmente detectados.

Usar un perfil de Chrome real: Inicia Chrome con tu perfil de usuario existente para beneficiarte de tus cookies y tu historial.

options = webdriver.ChromeOptions()
options.add_argument("--user-data-dir=/path/to/your/chrome/profile")
driver = webdriver.Chrome(options=options)

Usar un proxy o VPN: Si tu IP está bloqueada, un proxy rotativo o un VPN te permite cambiar de dirección IP. Servicios como Bright Data o Oxylabs ofrecen proxies residenciales adecuados para el scraping.

Limitar el volumen por sesión: No scrapees 500 fichas de una vez. Divide en sesiones de 50-100 fichas con pausas entre cada una.


El límite de 120 resultados de Google Maps

Google Maps nunca devuelve más de 120 resultados por búsqueda, sin importar la zona geográfica. Es una limitación estructural, no un error.

Para sortear este límite y cubrir una ciudad entera:

  1. Divide por distrito o barrio: "Restaurantes París 1er", "Restaurantes París 2º", etc.
  2. Divide por código postal: Itera sobre una lista de códigos postales.
  3. Usa una cuadrícula geográfica: Divide el área en celdas y lanza una búsqueda por celda.

Este enfoque multiplica el número de solicitudes y, por lo tanto, el tiempo de ejecución. Para cubrir una gran ciudad con varias categorías, cuenta con varias horas de scraping.


Ir más allá con BeautifulSoup y Requests

Selenium no siempre es necesario. Para algunos datos accesibles en el HTML estático, BeautifulSoup y Requests son suficientes y mucho más rápidos.

pip install beautifulsoup4 requests

Pero para Google Maps específicamente, el renderizado dinámico hace que Selenium sea indispensable para la mayoría de los datos. BeautifulSoup es más útil para scraper los sitios web de los negocios una vez que has recuperado sus URLs desde Google Maps — por ejemplo, para extraer los correos electrónicos de contacto.


Cuando el scraping manual se vuelve contraproducente

Escribir y mantener un scraper de Google Maps lleva tiempo. Mucho tiempo.

  • La configuración inicial: 2 a 4 horas para un desarrollador experimentado
  • El mantenimiento cuando Google cambia sus selectores: 1 a 3 horas por incidente
  • La gestión de proxies y CAPTCHA: costo mensual variable
  • El tiempo de ejecución para grandes volúmenes: varias horas por exportación

Para un desarrollador que quiere aprender sobre web scraping, es un excelente ejercicio. Para un equipo comercial que necesita 10,000 contactos calificados rápidamente, es una pérdida de tiempo.

IBLead es una alternativa directa. La base contiene más de 50 millones de negocios de Google Maps en 37 países, ya indexados y actualizados cada semana. Filtras por ciudad, categoría, calificación de Google, número de reseñas, tecnologías utilizadas en el sitio web — y exportas a CSV en 2 minutos. Sin código, sin WebDriver, sin CAPTCHA. A 44€ por 10,000 leads, es decir, 0,004€ por contacto.

Si necesitas datos locales para la prospección y no un proyecto de scraping técnico, IBLead te ahorra varias horas.


FAQ

Las condiciones de uso de Google prohíben el scraping automatizado de sus servicios. En la práctica, Google puede bloquear tu IP o tu cuenta. Desde el punto de vista legal, la situación varía según los países y el uso de los datos. Para un uso comercial a gran escala, consulta a un abogado especializado en derecho digital.

¿Por qué mi script de Selenium ya no encuentra los elementos?

Google Maps actualiza sus clases CSS regularmente. Abre las herramientas de desarrollador (F12), inspecciona los elementos que buscas y actualiza tus selectores CSS. Esta es la causa número uno de los scripts que dejan de funcionar.

¿Cómo extraer los correos electrónicos desde Google Maps?

Google Maps no muestra los correos electrónicos directamente. Para recuperarlos, primero debes extraer las URLs de los sitios web de los negocios, luego scraper esos sitios para encontrar las direcciones de correo electrónico en las páginas de "Contacto" o en el pie de página. IBLead realiza este trabajo de antemano: los correos electrónicos se enriquecen desde los sitios web y se incluyen en cada exportación.

¿Cuál es el límite de resultados por búsqueda en Google Maps?

Google Maps limita los resultados a 120 fichas por búsqueda. Para cubrir una zona más amplia, debes multiplicar las solicitudes dividiendo por barrio, código postal o utilizando una cuadrícula geográfica.

¿Selenium o Playwright para scraper Google Maps?

Ambos funcionan. Playwright (de Microsoft) es más reciente y a menudo más rápido. Maneja mejor las esperas asíncronas y es menos detectado como bot. Si estás comenzando un nuevo proyecto de scraping, vale la pena explorar Playwright. Selenium sigue siendo más documentado y tiene una comunidad más amplia.


Conclusión

El dúo Python + Selenium permite extraer datos de Google Maps de forma automatizada. Es una habilidad útil para cualquier desarrollador que trabaje en proyectos de recolección de datos o automatización web. La configuración requiere rigor: gestión de los retrasos, mantenimiento de los selectores, sortear las restricciones.

Si tu objetivo es la prospección comercial en lugar del aprendizaje técnico, IBLead te da acceso a los mismos datos sin escribir una línea de código. Prueba con 200 créditos.

créditos gratuitos — 200 créditos incluidos

¿Listo para empezar?

Accede a todas las empresas de Google Maps, enriquecidas con emails y datos legales.

Prueba IBLead gratis