Voltar ao blog
Guias e Tutoriais2026-02-13·7 min de leitura

Scraper Google Maps com Python e Selenium: Guia Completo

Por Ibrahim DemolCEO IBLeadAtualizado em 26 de março de 2026

Você precisa extrair as informações de 500 restaurantes, os e-mails de encanadores locais ou as avaliações de clientes de uma região? O Google Maps contém esses dados, mas baixá-los manualmente leva horas.

É aí que Python e Selenium entram em cena. Essas duas ferramentas permitem automatizar a extração de dados do Google Maps — mas exigem tempo, habilidades de programação e apresentam desafios técnicos significativos.

Este artigo mostra como funcionam Python e Selenium para scraping, os passos concretos para começar, as armadilhas a evitar e, acima de tudo: quando uma abordagem manual não é a solução certa.


Por que Python e Selenium para Google Maps?

O Google Maps não é uma simples página HTML estática. Os resultados são carregados dinamicamente: você digita uma pesquisa, as fichas aparecem gradualmente, você rola, outros resultados são carregados. É JavaScript em ação.

Três ferramentas podem extrair esses dados:

1. BeautifulSoup ou Requests Essas bibliotecas Python recuperam o código HTML bruto de uma página. Problema: elas não conseguem executar JavaScript. No Google Maps, você obtém uma página vazia.

2. Selenium O Selenium inicia um verdadeiro navegador (Chrome, Firefox) e simula cliques, rolagens e interações humanas. O JavaScript é executado. Você pode esperar que os resultados sejam carregados e, em seguida, extraí-los. É lento, mas funciona.

3. Puppeteer ou Playwright Ferramentas semelhantes ao Selenium, mais rápidas, mas menos documentadas para iniciantes.

Por que escolher Python + Selenium? - Python é fácil de aprender e muito documentado - Selenium funciona com todos os navegadores - Combinados, eles lidam com páginas dinâmicas sem API - Você tem controle total sobre o que extrai

Limitação chave: é lento. Extrair 1.000 resultados pode levar de 2 a 3 horas. E você corre o risco de bloqueios de IP, CAPTCHAs ou bans temporários.


Requisitos técnicos: o que instalar

Antes de escrever uma única linha de código, instale essas ferramentas.

1. Python (versão 3.8 ou superior)

Baixe de python.org. Durante a instalação, marque "Add Python to PATH" — isso é crucial para usar o Python na linha de comando.

Verifique a instalação:

python --version

Você deve ver Python 3.x.x.

2. Selenium

Abra seu terminal ou prompt de comando e digite:

pip install selenium

Pip (Python Package Manager) baixa e instala o Selenium automaticamente.

3. WebDriver para seu navegador

O Selenium não pode controlar um navegador sem um driver (WebDriver). A escolha mais comum é o Chrome.

Para o Chrome: - Baixe ChromeDriver (deve corresponder à sua versão do Chrome) - Descompacte o arquivo - Anote o caminho completo do arquivo chromedriver (ex: /Users/nome/Downloads/chromedriver)

Alternativa simples: instale webdriver-manager para evitar gerenciar as versões manualmente:

pip install webdriver-manager

4. Bibliotecas adicionais

Para processar e exportar os dados:

pip install pandas requests beautifulsoup4
  • Pandas: organiza os dados em tabelas (DataFrames)
  • Requests: faz requisições HTTP (opcional aqui, mas útil)
  • BeautifulSoup: analisa o HTML (opcional)

Verifique se tudo funciona:

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

Você deve ver um número de versão (ex: 4.15.2).


Anatomia de um script Selenium para Google Maps

Aqui está a estrutura geral de um script de scraping do 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. Lançar o navegador
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

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

# 3. Pesquisar um termo
search_box = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "searchboxinput"))
)
search_box.send_keys("Restaurantes Paris")
search_box.send_keys(Keys.ENTER)

# 4. Aguardar os resultados
time.sleep(3)

# 5. Extrair os dados
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 em CSV
df = pd.DataFrame(results)
df.to_csv("restaurantes.csv", index=False)

# 7. Fechar o navegador
driver.quit()

Vamos analisar cada etapa.


Etapa 1: Lançar o 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 baixa automaticamente a versão correta do ChromeDriver. Você não precisa fazer nada manualmente.

Alternativa sem webdriver-manager (se você baixou o ChromeDriver manualmente):

driver = webdriver.Chrome("/caminho/para/chromedriver")

Etapa 2: Acessar o Google Maps e pesquisar

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

# Aguardar que a barra de pesquisa esteja visível
search_box = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "searchboxinput"))
)

# Digitar a pesquisa
search_box.send_keys("Encanadores Lyon")

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

# Aguardar que os resultados sejam carregados
time.sleep(3)

Por que WebDriverWait? O Google Maps carrega os elementos dinamicamente. Se você tentar encontrar a barra de pesquisa antes que ela exista, o script falha. WebDriverWait aguarda até 10 segundos para que o elemento apareça.


Etapa 3: Extrair os nomes e endereços

# Encontrar todos os resultados (cada resultado é uma ficha de negócio)
result_elements = driver.find_elements(By.CLASS_NAME, "Nv2PK")

results = []

for element in result_elements:
    try:
        # Nome do negócio
        name = element.find_element(By.CLASS_NAME, "NrjWb").text

        # Endereço
        address = element.find_element(By.CLASS_NAME, "Xs85Hc").text

        # Avaliação (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"Erro: {e}")
        continue

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

Seletores CSS: By.CLASS_NAME encontra elementos pela sua classe CSS. Os nomes de classe (Nv2PK, NrjWb) mudam regularmente no Google. Se o script não funcionar, abra o inspetor (F12) e encontre as classes corretas.


Etapa 4: Gerenciar a paginação

O Google Maps exibe cerca de 20 resultados por página. Para obter mais, você precisa rolar para baixo na lista.

# Encontrar o contêiner dos resultados
results_container = driver.find_element(By.CLASS_NAME, "m6QErb")

# Rolar 5 vezes (cada rolagem carrega ~20 resultados adicionais)
for _ in range(5):
    driver.execute_script(
        "arguments[0].scrollTop = arguments[0].scrollHeight",
        results_container
    )
    time.sleep(2)  # Aguardar que os resultados sejam carregados

# Extrair TODOS os resultados (agora que você rolou)
all_results = driver.find_elements(By.CLASS_NAME, "Nv2PK")

Atenção: rolar 5 vezes = ~100 resultados. Rolar 20 vezes = 400+ resultados e 2-3 minutos. É lento.


Etapa 5: Extrair as coordenadas (latitude/longitude)

O Google Maps armazena as coordenadas GPS na URL. Você pode recuperá-las clicando em uma ficha.

results = []

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

        # Clicar no resultado para abrir a ficha detalhada
element.click()
time.sleep(1)

        # Recuperar a URL (ela contém as 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"Erro: {e}")

As coordenadas estão na URL após /@ (latitude, longitude).


Etapa 6: Exportar os dados em CSV

import pandas as pd

# Converter em DataFrame
df = pd.DataFrame(results)

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

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

Abra o arquivo CSV no Excel ou Google Sheets.


Etapa 7: Fechar o navegador

driver.quit()

Sempre feche o navegador para liberar a memória.


Script completo: exemplo concreto

Aqui está um script funcional para extrair restaurantes de uma cidade:

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

# Lançar o navegador
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

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

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

    time.sleep(3)

    # Rolar para carregar mais 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)

    # Extrair os dados
    results = []
    result_elements = driver.find_elements(By.CLASS_NAME, "Nv2PK")

    for element in result_elements[:50]:  # Limitar a 50 para testar
        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_marseille.csv", index=False, encoding="utf-8")

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

finally:
    driver.quit()

Execute-o:

python scraper.py

Um navegador Chrome se abre, realiza a pesquisa e exporta os resultados.


Os verdadeiros desafios do scraping do Google Maps

O script funciona no seu computador. Mas em grande escala, você encontrará problemas.

1. Bloqueio por IP

Após 50-100 requisições do mesmo IP, o Google bloqueia você temporariamente. Você verá um CAPTCHA ou uma página de erro.

Soluções: - Adicionar atrasos aleatórios entre as requisições (time.sleep(random.randint(2, 5))) - Usar proxies ou uma VPN - Distribuir as requisições ao longo de vários dias

2. CAPTCHA

O Google pode exibir um CAPTCHA para verificar se você é humano. O Selenium não pode resolvê-lo automaticamente (sem ferramentas externas pagas).

Soluções: - Aceitar que algumas requisições falhem - Usar serviços de resolução de CAPTCHA (caro e lento) - Scraping com moderação

3. Seletores CSS que mudam

O Google altera regularmente suas classes CSS. Nv2PK de hoje pode se tornar Abc123 amanhã. Seu script quebra.

Soluções: - Usar seletores XPath mais estáveis (mais complexos) - Verificar e atualizar o script todo mês - Monitorar os erros

4. Performance

Extrair 1.000 resultados = 50+ minutos. Extrair 10.000 = 8+ horas. É muito lento em comparação com ferramentas automatizadas.

5. Dados incompletos

Você obtém os nomes e endereços. Mas os e-mails, números de telefone, avaliações, tecnologias usadas? Você precisa clicar em cada ficha, esperar que ela carregue e, em seguida, extrair. É ainda mais lento.

Os Termos de Serviço do Google Maps proíbem o scraping automatizado. Você não corre o risco de processos, mas sua conta pode ser banida ou seu IP bloqueado permanentemente.


Quando Python + Selenium NÃO é a solução certa

O Selenium é poderoso, mas não é a ferramenta ideal para:

Extrair > 500 resultados regularmente Muito lento, muitos riscos de bloqueio.

Obter e-mails, telefones, avaliações, tecnologias O Selenium pode fazer isso, mas você teria que clicar em cada ficha. 1.000 fichas = 2-3 dias de scraping.

Dados atualizados mensalmente Você terá que reiniciar o script todo mês. Risco de bloqueio a cada execução.

Necessidade de dados enriquecidos Os dados brutos do Google Maps carecem de informações comerciais.

Sem habilidades em código Python + Selenium exigem depuração, manutenção e atualizações.


IBLead: a alternativa sem código

Se você precisa extrair rapidamente dados do Google Maps sem scraping, existe outra abordagem: usar uma base de dados pré-indexada.

IBLead é uma base de dados de mais de 5 milhões de negócios do Google Maps (França, Bélgica, Suíça, Canadá, Estados Unidos e mais de 10 outros países). Os dados são atualizados mensalmente — não há necessidade de scraping.

Você pesquisa por cidade, região, categoria e, em seguida, exporta em CSV com: - Nomes, endereços, telefones - E-mails (enriquecidos a partir do site) - Avaliações do Google (texto completo, notas, datas, autores) — exclusivo - Tecnologias detectadas (WordPress, Shopify, HubSpot, etc.) — exclusivo - Redes sociais, horários, coordenadas GPS

Comparação: Python + Selenium vs IBLead

Pronto para começar?

Aceda a todas as empresas do Google Maps, enriquecidas com emails e dados legais.

Experimente o IBLead gratuitamente