Voltar ao blog
Guias e Tutoriais2026-03-15·11 min de leitura

Guia Google Maps Python Selenium: extrair dados

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

Você quer extrair dados do Google Maps com Python e Selenium? Este guia cobre tudo: a preparação do ambiente, a escrita do script, as armadilhas a evitar. A palavra-chave guia google maps python selenium extrair aparece frequentemente nas pesquisas de desenvolvedores que desejam automatizar a coleta de dados locais — e com razão. O Google Maps contém milhões de fichas de negócios com endereços, telefones, notas e horários. Todas essas informações são úteis para a prospecção, estudos de mercado ou análise concorrencial.


Por que combinar Python e Selenium para scraper Google Maps?

Python é a linguagem de referência para web scraping. Sua sintaxe é clara, sua comunidade é massiva, e suas bibliotecas cobrem todas as necessidades: manipulação de dados com Pandas, requisições HTTP com Requests, parsing HTML com BeautifulSoup.

Mas o Google Maps apresenta um problema específico. Grande parte dos dados não está no HTML estático. As informações aparecem após interações do usuário: clique em uma ficha, rolagem na lista, abertura de um painel lateral. Um simples requests.get() não é suficiente.

É aí que entra o Selenium. O Selenium controla um verdadeiro navegador (Chrome, Firefox, Edge) e simula o comportamento de um usuário real. Ele pode clicar, rolar, esperar que um elemento apareça e extrair o conteúdo renderizado dinamicamente. Combinado com Python, torna-se uma ferramenta sólida para automatizar a extração de dados em interfaces web complexas como o Google Maps.


Preparar o ambiente de desenvolvimento

Antes de escrever a menor linha de código, você precisa instalar as ferramentas certas.

1. Instalar Python

Baixe a versão estável mais recente do Python em python.org. Durante a instalação no Windows, marque a opção "Add Python to PATH" — sem isso, os comandos pip não funcionarão no terminal.

Verifique a instalação com:

python --version

2. Instalar Selenium

Abra seu terminal ou prompt de comando e digite:

pip install selenium

O Selenium se instala em poucos segundos. Você também precisará do Pandas para organizar os dados:

pip install pandas

3. Baixar o WebDriver

O Selenium precisa de um WebDriver para controlar seu navegador. O WebDriver é um executável que faz a ligação entre seu script Python e o navegador.

A versão do WebDriver deve corresponder exatamente à versão do seu navegador. Verifique sua versão do Chrome em chrome://settings/help e baixe o ChromeDriver correspondente.

Desde o Selenium 4.6+, você também pode usar selenium-manager que gerencia o download automaticamente. Prático para evitar erros de versão.


Compreender a estrutura do Google Maps antes de scraper

Antes de escrever o script, reserve 5 minutos para inspecionar o Google Maps nas ferramentas de desenvolvedor do seu navegador (F12).

Aqui está o que você observará:

  • A lista de resultados está em um contêiner rolável com uma classe CSS específica
  • Cada ficha de negócio é um elemento clicável
  • Os detalhes (telefone, site, horários) aparecem apenas após clicar em uma ficha
  • O Google Maps carrega os resultados em lazy loading — os elementos na parte inferior da lista não existem no DOM até que você role

Esses comportamentos dinâmicos explicam por que o Selenium é necessário. Eles também explicam por que o scraping do Google Maps é tecnicamente mais complexo do que um site estático.

Atenção: O Google Maps limita os resultados a 120 fichas por pesquisa. Se sua área geográfica contém mais de 120 negócios em uma categoria, você precisará dividir sua pesquisa (por bairro, por código postal, etc.) para cobrir o total.


Escrever o script Python Selenium para Google Maps

Aqui está um exemplo funcional que pesquisa restaurantes em uma cidade e extrai seus endereços.

Estrutura do 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

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

# Aguardar o carregamento da página
time.sleep(3)

# Inserir a consulta de pesquisa
search_bar = driver.find_element(By.NAME, "q")
search_bar.send_keys("Restaurantes Paris 11")
search_bar.send_keys(Keys.ENTER)

# Aguardar os resultados
time.sleep(5)

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

# Extrair as 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({"Nome": name, "Endereço": address})
    except Exception:
        pass

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

# Fechar o navegador
driver.quit()

O que este script faz, passo a passo

Passo 1 — Iniciar o Chrome: webdriver.Chrome() abre uma janela do Chrome controlada pelo Selenium. Você verá ela abrir na sua tela.

Passo 2 — Navegar para o Google Maps: driver.get() carrega a página. O time.sleep(3) dá tempo para o JavaScript ser executado.

Passo 3 — Iniciar a pesquisa: O script encontra a barra de pesquisa pelo seu atributo name="q", digita a consulta e pressiona Enter.

Passo 4 — Rolar: O loop rola o painel de resultados 5 vezes para acionar o lazy loading e carregar mais fichas.

Passo 5 — Extrair: Para cada ficha encontrada, o script recupera o nome e o endereço. O bloco try/except evita que o script falhe se um elemento estiver ausente.

Passo 6 — Exportar: O Pandas organiza os dados em um DataFrame e os salva em CSV. A codificação utf-8-sig garante que os caracteres especiais (acentos, etc.) sejam exibidos corretamente no Excel.


Extrair dados adicionais: telefone, site, nota

Para recuperar o telefone, o site e a nota do Google, é necessário clicar em cada ficha e esperar que o painel de detalhes se abra.

for result in results:
    try:
        result.click()
        time.sleep(3)  # Aguardar o painel de detalhes
        
        # Nota do Google
        try:
            rating = driver.find_element(By.CSS_SELECTOR, "span.MW4etd").text
        except:
            rating = ""
        
        # Telefone
        try:
            phone = driver.find_element(
                By.CSS_SELECTOR, 
                "button[data-item-id^='phone'] span.Io6YTe"
            ).text
        except:
            phone = ""
        
        # Site
        try:
            website = driver.find_element(
                By.CSS_SELECTOR, 
                "a[data-item-id='authority']"
            ).get_attribute("href")
        except:
            website = ""
            
        addresses.append({
            "Nome": name,
            "Telefone": phone,
            "Site": website,
            "Nota": rating
        })
        
    except Exception:
        pass

Este código é mais lento. Cada clique + espera leva de 3 a 5 segundos. Para 100 fichas, conte de 5 a 8 minutos de execução no mínimo.


Os seletores CSS do Google Maps quebram regularmente

Esse é o problema número um do scraping do Google Maps com Selenium. O Google altera suas classes CSS sem aviso. Um script que funciona hoje pode retornar zero resultados amanhã.

Algumas boas práticas para limitar os danos:

Use atributos estáveis: Os atributos data-item-id, aria-label e role mudam menos frequentemente do que as classes CSS geradas automaticamente.

Adicione logs: Mostre o número de elementos encontrados em cada etapa. Se um seletor retornar 0 resultados, você saberá imediatamente.

Versione seu script: Mantenha as versões antigas. Quando o Google quebra seus seletores, você pode comparar e identificar o que mudou.

Teste com driver.page_source: Salve o HTML da página para inspecioná-lo offline quando algo não funcionar.


Gerenciar restrições e CAPTCHA

O Google detecta comportamentos automatizados. Aqui estão os sinais que acionam bloqueios:

  • Demais requisições da mesma IP em pouco tempo
  • Sem atraso entre as ações (comportamento não humano)
  • User-agent ausente ou genérico
  • Ausência de cookies de sessão

Estratégias para reduzir bloqueios

Adicionar atrasos aleatórios: Substitua time.sleep(3) por time.sleep(random.uniform(2, 5)). Atrasos fixos são mais facilmente detectados.

Usar um perfil Chrome real: Inicie o Chrome com seu perfil de usuário existente para aproveitar seus cookies e seu histórico.

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

Usar um proxy ou VPN: Se seu IP estiver bloqueado, um proxy rotativo ou uma VPN permite que você mude de endereço IP. Serviços como Bright Data ou Oxylabs oferecem proxies residenciais adequados para scraping.

Limitar o volume por sessão: Não scrape 500 fichas seguidas. Divida em sessões de 50-100 fichas com pausas entre cada uma.


A limitação de 120 resultados do Google Maps

O Google Maps nunca retorna mais de 120 resultados por pesquisa, independentemente da área geográfica. É uma limitação estrutural, não um bug.

Para contornar essa limitação e cobrir uma cidade inteira:

  1. Divida por arrondissement ou bairro: "Restaurantes Paris 1er", "Restaurantes Paris 2ème", etc.
  2. Divida por código postal: Itere sobre uma lista de códigos postais.
  3. Use uma grade geográfica: Divida a área em células e inicie uma pesquisa por célula.

Essa abordagem multiplica o número de requisições e, portanto, o tempo de execução. Para cobrir uma grande cidade com várias categorias, conte várias horas de scraping.


Ir mais longe com BeautifulSoup e Requests

O Selenium nem sempre é necessário. Para alguns dados acessíveis no HTML estático, o BeautifulSoup e o Requests são suficientes e muito mais rápidos.

pip install beautifulsoup4 requests

Mas para o Google Maps especificamente, a renderização dinâmica torna o Selenium indispensável para a maioria dos dados. O BeautifulSoup é mais útil para scraper os sites dos negócios uma vez que você tenha recuperado suas URLs do Google Maps — por exemplo, para extrair os emails de contato.


Quando o scraping manual se torna contraproducente

Escrever e manter um scraper do Google Maps leva tempo. Muito tempo.

  • A configuração inicial: 2 a 4 horas para um desenvolvedor experiente
  • A manutenção quando o Google muda seus seletores: 1 a 3 horas por incidente
  • A gestão de proxies e CAPTCHA: custo mensal variável
  • O tempo de execução para grandes volumes: várias horas por exportação

Para um desenvolvedor que quer aprender web scraping, é um excelente exercício. Para uma equipe comercial que precisa de 10.000 contatos qualificados rapidamente, é uma perda de tempo.

IBLead é uma alternativa direta. A base contém mais de 50M de negócios do Google Maps em 37 países, já indexados e atualizados toda semana. Você filtra por cidade, categoria, nota do Google, número de avaliações, tecnologias usadas no site — e exporta em CSV em 2 minutos. Sem código, sem WebDriver, sem CAPTCHA. A 44€ por 10.000 leads, ou seja, 0,004€ por contato.

Se você precisa de dados locais para prospecção e não de um projeto técnico de scraping, o IBLead economiza várias horas.


FAQ

Os termos de uso do Google proíbem o scraping automatizado de seus serviços. Na prática, o Google pode bloquear seu IP ou sua conta. Do ponto de vista legal, a situação varia de acordo com os países e o uso dos dados. Para um uso comercial em larga escala, consulte um advogado especializado em direito digital.

Por que meu script Selenium não encontra mais os elementos?

O Google Maps atualiza suas classes CSS regularmente. Abra as ferramentas de desenvolvedor (F12), inspecione os elementos que você está procurando e atualize seus seletores CSS. Essa é a causa número um dos scripts que param de funcionar.

Como extrair emails do Google Maps?

O Google Maps não exibe os emails diretamente. Para recuperá-los, primeiro é necessário extrair as URLs dos sites dos negócios, e depois scraper esses sites para encontrar os endereços de email nas páginas "Contato" ou no rodapé. O IBLead faz esse trabalho antecipadamente: os emails são enriquecidos a partir dos sites e incluídos em cada exportação.

Qual é o limite de resultados por pesquisa no Google Maps?

O Google Maps limita os resultados a 120 fichas por pesquisa. Para cobrir uma área mais ampla, você deve multiplicar as requisições dividindo por bairro, código postal ou usando uma grade geográfica.

Selenium ou Playwright para scraper Google Maps?

Ambos funcionam. O Playwright (da Microsoft) é mais recente e muitas vezes mais rápido. Ele lida melhor com esperas assíncronas e é menos detectado como bot. Se você está começando um novo projeto de scraping, o Playwright vale a pena ser explorado. O Selenium continua sendo mais documentado e tem uma comunidade maior.


Conclusão

A dupla Python + Selenium permite extrair dados do Google Maps de forma automatizada. É uma habilidade útil para qualquer desenvolvedor que trabalha em projetos de coleta de dados ou automação web. A configuração exige rigor: gestão de atrasos, manutenção de seletores, contorno de restrições.

Se seu objetivo é a prospecção comercial em vez do aprendizado técnico, o IBLead oferece acesso aos mesmos dados sem escrever uma linha de código. Experimente com 200 créditos.

créditos gratuitos — 200 créditos incluídos

Pronto para começar?

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

Experimente o IBLead gratuitamente