Volver al blog
Guías y tutoriales2026-02-13·7 min de lectura

Scraper Google Maps con Python y Selenium: Guía completa

Por Ibrahim DemolCEO IBLeadActualizado el 26 de marzo de 2026

¿Necesitas extraer las coordenadas de 500 restaurantes, los correos electrónicos de fontaneros locales o las opiniones de clientes de una región? Google Maps contiene estos datos, pero descargarlos manualmente lleva horas.

Aquí es donde entran Python y Selenium. Estas dos herramientas permiten automatizar la extracción de datos desde Google Maps, pero requieren tiempo, habilidades de programación y presentan importantes desafíos técnicos.

Este artículo te muestra cómo funcionan Python y Selenium para el scraping, los pasos concretos para comenzar, las trampas a evitar y, sobre todo: cuándo un enfoque manual no es la solución adecuada.


¿Por qué Python y Selenium para Google Maps?

Google Maps no es una simple página HTML estática. Los resultados se cargan dinámicamente: escribes una búsqueda, las fichas aparecen progresivamente, haces scroll y se cargan más resultados. Es JavaScript en acción.

Tres herramientas pueden extraer estos datos:

1. BeautifulSoup o Requests Estas bibliotecas de Python recuperan el código HTML bruto de una página. Problema: no pueden ejecutar JavaScript. En Google Maps, obtienes una página vacía.

2. Selenium Selenium lanza un navegador real (Chrome, Firefox) y simula clics, desplazamientos e interacciones humanas. El JavaScript se ejecuta. Puedes esperar a que se carguen los resultados y luego extraerlos. Es lento, pero funciona.

3. Puppeteer o Playwright Herramientas similares a Selenium, más rápidas, pero menos documentadas para principiantes.

¿Por qué elegir Python + Selenium? - Python es fácil de aprender y muy documentado - Selenium funciona con todos los navegadores - Combinados, manejan páginas dinámicas sin API - Tienes control total sobre lo que extraes

Limitación clave: es lento. Extraer 1,000 resultados puede llevar de 2 a 3 horas. Y corres el riesgo de bloqueos de IP, CAPTCHAs o prohibiciones temporales.


Requisitos técnicos: lo que hay que instalar

Antes de escribir una sola línea de código, instala estas herramientas.

1. Python (versión 3.8 o más reciente)

Descárgalo desde python.org. Durante la instalación, marca "Add Python to PATH" — es crucial para usar Python en la línea de comandos.

Verifica la instalación:

python --version

Deberías ver Python 3.x.x.

2. Selenium

Abre tu terminal o línea de comandos y escribe:

pip install selenium

Pip (Python Package Manager) descarga e instala Selenium automáticamente.

3. WebDriver para tu navegador

Selenium no puede controlar un navegador sin un controlador (WebDriver). La opción más común es Chrome.

Para Chrome: - Descarga ChromeDriver (debe coincidir con tu versión de Chrome) - Descomprime el archivo - Anota la ruta completa del archivo chromedriver (ej: /Users/nombre/Downloads/chromedriver)

Alternativa sencilla: instala webdriver-manager para evitar gestionar las versiones manualmente:

pip install webdriver-manager

4. Bibliotecas adicionales

Para procesar y exportar los datos:

pip install pandas requests beautifulsoup4
  • Pandas: organiza los datos en tablas (DataFrames)
  • Requests: realiza solicitudes HTTP (opcional aquí, pero útil)
  • BeautifulSoup: analiza el HTML (opcional)

Verifica que todo funcione:

python -c "import selenium; print(selenium.__version__)"

Deberías ver un número de versión (ej: 4.15.2).


Anatomía de un script Selenium para Google Maps

Aquí está la estructura general de un script de scraping de Google Maps:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
import time
import pandas as pd

# 1. Lanzar el navegador
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

# 2. Acceder a Google Maps
driver.get("https://www.google.com/maps")

# 3. Buscar un término
search_box = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "searchboxinput"))
)
search_box.send_keys("Restaurantes París")
search_box.send_keys(Keys.ENTER)

# 4. Esperar los resultados
time.sleep(3)

# 5. Extraer los datos
results = []
result_elements = driver.find_elements(By.CLASS_NAME, "Nv2PK")

for element in result_elements:
    try:
        name = element.find_element(By.CLASS_NAME, "NrjWb").text
        results.append({"name": name})
    except:
        pass

# 6. Exportar a CSV
df = pd.DataFrame(results)
df.to_csv("restaurantes.csv", index=False)

# 7. Cerrar el navegador
driver.quit()

Desglosamos cada paso.


Paso 1: Lanzar el navegador

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

webdriver-manager descarga automáticamente la versión correcta de ChromeDriver. No tienes que hacer nada manualmente.

Alternativa sin webdriver-manager (si descargaste ChromeDriver manualmente):

driver = webdriver.Chrome("/ruta/a/chromedriver")

Paso 2: Acceder a Google Maps y buscar

driver.get("https://www.google.com/maps")

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Esperar a que la barra de búsqueda sea visible
search_box = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "searchboxinput"))
)

# Escribir la búsqueda
search_box.send_keys("Fontaneros Lyon")

# Presionar Enter
from selenium.webdriver.common.keys import Keys
search_box.send_keys(Keys.ENTER)

# Esperar a que se carguen los resultados
time.sleep(3)

¿Por qué WebDriverWait? Google Maps carga los elementos dinámicamente. Si intentas encontrar la barra de búsqueda antes de que exista, el script falla. WebDriverWait espera hasta 10 segundos a que el elemento aparezca.


Paso 3: Extraer los nombres y direcciones

# Encontrar todos los resultados (cada resultado es una ficha de negocio)
result_elements = driver.find_elements(By.CLASS_NAME, "Nv2PK")

results = []

for element in result_elements:
    try:
        # Nombre del negocio
        name = element.find_element(By.CLASS_NAME, "NrjWb").text

        # Dirección
        address = element.find_element(By.CLASS_NAME, "Xs85Hc").text

        # Calificación (opcional)
        try:
            rating = element.find_element(By.CLASS_NAME, "MW4etd").text
        except:
            rating = "N/A"

        results.append({
            "name": name,
            "address": address,
            "rating": rating
        })
    except Exception as e:
        print(f"Error: {e}")
        continue

print(f"Extraído {len(results)} resultados")

Selectores CSS: By.CLASS_NAME encuentra elementos por su clase CSS. Los nombres de clase (Nv2PK, NrjWb) cambian regularmente en Google. Si el script no funciona, abre el inspector (F12) y encuentra las clases correctas.


Paso 4: Manejar la paginación

Google Maps muestra aproximadamente 20 resultados por página. Para obtener más, debes desplazarte hacia abajo en la lista.

# Encontrar el contenedor de resultados
results_container = driver.find_element(By.CLASS_NAME, "m6QErb")

# Desplazarse 5 veces (cada desplazamiento carga ~20 resultados adicionales)
for _ in range(5):
    driver.execute_script(
        "arguments[0].scrollTop = arguments[0].scrollHeight",
        results_container
    )
    time.sleep(2)  # Esperar a que se carguen los resultados

# Extraer TODOS los resultados (ahora que has desplazado)
all_results = driver.find_elements(By.CLASS_NAME, "Nv2PK")

Atención: desplazarse 5 veces = ~100 resultados. Desplazarse 20 veces = 400+ resultados y 2-3 minutos. Es lento.


Paso 5: Extraer las coordenadas (latitud/longitud)

Google Maps almacena las coordenadas GPS en la URL. Puedes recuperarlas haciendo clic en una ficha.

results = []

for element in result_elements:
    try:
        name = element.find_element(By.CLASS_NAME, "NrjWb").text

        # Hacer clic en el resultado para abrir la ficha detallada
element.click()
time.sleep(1)

        # Recuperar la URL (contiene las coordenadas)
        current_url = driver.current_url
        # Formato: https://www.google.com/maps/place/.../@48.8566,2.3522,...

        results.append({
            "name": name,
            "url": current_url
        })
    except Exception as e:
        print(f"Error: {e}")

Las coordenadas están en la URL después de /@ (latitud, longitud).


Paso 6: Exportar los datos a CSV

import pandas as pd

# Convertir a DataFrame
df = pd.DataFrame(results)

# Exportar a CSV
df.to_csv("resultados_google_maps.csv", index=False, encoding="utf-8")

print(f"✓ {len(results)} resultados exportados a resultados_google_maps.csv")

Abre el archivo CSV en Excel o Google Sheets.


Paso 7: Cerrar el navegador

driver.quit()

Siempre cierra el navegador para liberar memoria.


Script completo: ejemplo concreto

Aquí tienes un script funcional para extraer restaurantes de una ciudad:

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
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
import time
import pandas as pd

# Lanzar el navegador
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

try:
    # Acceder a Google Maps
driver.get("https://www.google.com/maps")

    # Buscar restaurantes
    search_box = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "searchboxinput"))
    )
    search_box.send_keys("Restaurantes Marsella")
    search_box.send_keys(Keys.ENTER)

    time.sleep(3)

    # Desplazarse para cargar más resultados
    results_container = driver.find_element(By.CLASS_NAME, "m6QErb")
    for _ in range(3):
        driver.execute_script(
            "arguments[0].scrollTop = arguments[0].scrollHeight",
            results_container
        )
        time.sleep(2)

    # Extraer los datos
    results = []
    result_elements = driver.find_elements(By.CLASS_NAME, "Nv2PK")

    for element in result_elements[:50]:  # Limitar a 50 para probar
        try:
            name = element.find_element(By.CLASS_NAME, "NrjWb").text
            address = element.find_element(By.CLASS_NAME, "Xs85Hc").text

            results.append({
                "name": name,
                "address": address
            })
        except:
            pass

    # Exportar
df = pd.DataFrame(results)
df.to_csv("restaurantes_marsella.csv", index=False, encoding="utf-8")

    print(f"✓ {len(results)} restaurantes extraídos")

finally:
    driver.quit()

Ejecuta:

python scraper.py

Se abre un navegador Chrome, realiza la búsqueda y exporta los resultados.


Los verdaderos desafíos del scraping de Google Maps

El script funciona en tu computadora. Pero a gran escala, enfrentas problemas.

1. Bloqueo por IP

Después de 50-100 solicitudes desde la misma IP, Google te bloquea temporalmente. Ves un CAPTCHA o una página de error.

Soluciones: - Agregar retrasos aleatorios entre las solicitudes (time.sleep(random.randint(2, 5))) - Usar proxies o una VPN - Distribuir las solicitudes en varios días

2. CAPTCHA

Google puede mostrar un CAPTCHA para verificar que eres humano. Selenium no puede resolverlo automáticamente (sin herramientas externas de pago).

Soluciones: - Aceptar que algunas solicitudes fallen - Usar servicios de resolución de CAPTCHA (caro y lento) - Scraping con moderación

3. Selectores CSS que cambian

Google modifica regularmente sus clases CSS. Nv2PK de hoy puede convertirse en Abc123 mañana. Tu script se rompe.

Soluciones: - Usar selectores XPath más estables (más complejos) - Verificar y actualizar el script cada mes - Monitorear errores

4. Rendimiento

Extraer 1,000 resultados = 50+ minutos. Extraer 10,000 = 8+ horas. Es muy lento en comparación con las herramientas automatizadas.

5. Datos incompletos

Obtienes los nombres y direcciones. Pero los correos electrónicos, los números de teléfono, las opiniones, las tecnologías utilizadas? Debes hacer clic en cada ficha, esperar a que se cargue y luego extraer. Es aún más lento.

Los Términos de Servicio de Google Maps prohíben el scraping automatizado. No corres el riesgo de demandas, pero tu cuenta puede ser prohibida o tu IP bloqueada permanentemente.


Cuando Python + Selenium NO es la buena solución

Selenium es poderoso, pero no es la herramienta ideal para:

Extraer > 500 resultados regularmente Demasiado lento, demasiados riesgos de bloqueo.

Obtener correos electrónicos, teléfonos, opiniones, tecnologías Selenium puede hacerlo, pero tendrías que hacer clic en cada ficha. 1,000 fichas = 2-3 días de scraping.

Datos actualizados mensualmente Tendrás que reiniciar el script cada mes. Riesgo de bloqueo en cada ejecución.

Necesidad de datos enriquecidos Los datos en bruto de Google Maps carecen de información comercial.

Sin habilidades de codificación Python + Selenium requieren depuración, mantenimiento, actualizaciones.


IBLead: la alternativa sin código

Si necesitas extraer rápidamente datos de Google Maps sin scraping, hay otro enfoque: usar una base de datos preindexada.

IBLead es una base de datos de más de 5 millones de negocios de Google Maps (Francia, Bélgica, Suiza, Canadá, Estados Unidos y más de 10 países). Los datos se actualizan mensualmente — no necesitas hacer scraping.

Buscas por ciudad, región, categoría y luego exportas a CSV con: - Nombres, direcciones, teléfonos - Correos electrónicos (enriquecidos desde el sitio web) - Opiniones de Google (texto completo, calificaciones, fechas, autores) — exclusivo - Tecnologías detectadas (WordPress, Shopify, HubSpot, etc.) — exclusivo - Redes sociales, horarios, coordenadas GPS

Comparación: Python + Selenium vs IBLead

¿Listo para empezar?

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

Prueba IBLead gratis