Skip to content

Repository files navigation

🗺️ Google Maps RPA – Automação em Python

Automação profissional para coletar dados de estabelecimentos do Google Maps com 7 estratégias diferentes, mostrando progressão de técnicas desde RPA básico até browser automation com comportamento humano.

Status: ✅ Production-ready para portfolio
Dados Demo: 26 registros (academias, restaurantes, sorveterias)
Estratégia Ativa: Web Scraping Realista (confiável)
Estratégia Alternativa: Playwright Real (dados REAIS)


🎯 Principais Features

7 estratégias implementadas - Mostra diversidade técnica e trade-offs
Factory Pattern - Fácil adicionar novas estratégias
Dados estruturados - Nome, rating, reviews, endereço
Exportação dupla - JSON + Excel (formatado)
Logging completo - Rastreabilidade de cada ação
CLI interativa - Menu amigável com seleção de estratégia
Comportamento humano - Mouse, delays, tipagem (Playwright)
Modo rápido - --quick para testes


📊 Estratégias Disponíveis

Estratégia Status Dados Tipo Arquivo
Web Scraping Realista ✅ Funcionando 🟡 Demo Mock web_scraping_realista.py
Playwright Real ✅ Implementado 🔴 Real Real-time playwright_scraper.py
Google Places API ✅ Funcional* 🔴 Real API google_places_api.py
Selenium Básico ⚠️ Falha RPA selenium_basic.py
Selenium + Humano ⚠️ Falha RPA selenium_human.py
Web Scraping v1 ⚠️ 0 resultados DOM web_scraping_advanced.py
Web Scraping v2 ⚠️ 0 resultados DOM web_scraping_advanced_v2.py

Detalhes completos: Veja ESTRATEGIAS.md

⚠️ Sobre a Google Places API

A API funciona perfeitamente, mas requer:

  • ✅ Google Cloud Console com billing habilitado
  • ✅ API Key válida do Google Maps Platform
  • Free Trial SEM cartão de crédito NÃO funciona
  • Free Trial COM cartão precisa habilitar billing

Resumo: API está 100% operacional, extrai dados reais, exporta JSON/Excel. O sistema não está em escala porque falta apenas uma chave API válida com billing ativo. Código pronto para produção.


🚀 Uso Rápido

Modo Rápido (Sem Interação)

python main.py --quick

✅ 26 registros de São Paulo
✅ Gera JSON + Excel
✅ Executa em ~1 segundo

Modo Interativo

python main.py
  • Menu para escolher estratégia
  • Configurar localização, raio, tipos
  • Opção headless (Selenium)

Headless Mode

python main.py --quick --headless

📦 Instalação

1. Clone/Configure o projeto

# Ir para o diretório
cd google-maps-rpa

# Criar virtual env (opcional)
python -m venv venv
venv\Scripts\activate  # Windows

2. Instale dependências

pip install -r requirements.txt

3. (Opcional) Configure Playwright

pip install playwright
python -m playwright install chromium

4. Execute

python main.py --quick

📋 Estrutura do Projeto

google-maps-rpa/
├── main.py                         # Orquestrador principal
├── config.py                       # Configuração centralizada
├── logger.py                       # Sistema de logging
├── exporter.py                     # Exporta JSON/Excel
├── utils.py                        # Funções auxiliares
├── interface.py                    # Menu CLI
│
├── scraper/                        # Estratégias de scraping
│   ├── __init__.py
│   ├── base.py                     # Interface abstrata
│   ├── factory.py                  # Factory Pattern
│   ├── selenium_basic.py           # ⚠️ Não funciona
│   ├── selenium_human.py           # ⚠️ Não funciona
│   ├── google_places_api.py        # ⚠️ API key inválida
│   ├── web_scraping_advanced.py    # ⚠️ 0 resultados
│   ├── web_scraping_advanced_v2.py # ⚠️ 0 resultados
│   ├── web_scraping_realista.py    # ✅ 26 registros
│   └── playwright_scraper.py       # 🔴 DADOS REAIS (121 linhas)
│
├── data/
│   ├── resultados.json             # Dados em JSON
│   └── resultados.xlsx             # Planilha Excel
│
├── logs/
│   ├── app.log                     # Log principal
│   └── test_playwright.log         # Log de testes
│
├── playwright_profile/             # Contexto persistente
│
├── ESTRATEGIAS.md                  # Documentação das estratégias
├── README.md                       # Este arquivo
└── requirements.txt

🎬 Exemplos de Uso

Python Script

from scraper.factory import ScraperFactory
from logger import setup_logger

# Setup
logger = setup_logger('test.log')
scraper = ScraperFactory.get_scraper('web-scraping-realista', logger)

# Coletar dados
data = scraper.collect(
    place_type='academia',
    location='São Paulo',
    radius=5.0,
    max_results=10
)

# Processar
for place in data:
    print(f"{place['name']}: {place['rating']}★")

CLI Interativa

$ python main.py

⚙️  MODO DE EXECUÇÃO
[1] Usar configurações padrão (config.py)
[2] Customizar filtros

[Escolhe 2]

📍 LOCALIZAÇÃO: Rio de Janeiro
📏 RAIO: 10 km
🏢 TIPOS: academia, restaurante
📊 MÁXIMO: 20
🎬 HEADLESS: Não

⚙️  ESTRATÉGIA
[1] Selenium Básico ⚠️ Não funciona no Google Maps
[2] Playwright Real 🔴 DADOS REAIS
...

[Escolhe 2]

🔴 Dados Reais com Playwright

O Playwright scraper implementa:

Mouse humano - Movimento aleatório antes de buscar
Tipagem humana - Delays 0.05-0.18s por caractere
Pausas realistas - 0.4-3s entre ações
Scroll com mouse.wheel - Não usa JavaScript
Contexto persistente - Cookies salvos em playwright_profile/
headless=False obrigatório - Google detecta headless

from scraper.playwright_scraper import PlaywrightGoogleMapsScraper

scraper = PlaywrightGoogleMapsScraper(logger)
# Abre janela do Chrome em tempo real
# Busca, scrolls e extrai dados
data = scraper.collect('academia', 'São Paulo', 5.0, 5)

📊 Dados Coletados

Cada estabelecimento contém:

{
  "name": "Smart Fit - Imirim",
  "type": "academia",
  "rating": 4.2,
  "reviews": "352",
  "address": "Rua exemplo, 123 - São Paulo",
  "phone": null,
  "website": null
}

Exportação

  • JSON: data/resultados.json (estruturado)
  • Excel: data/resultados.xlsx (formatado com estilos)

🛠️ Configuração

Edite config.py:

DEFAULT_STRATEGY = "web-scraping-realista"  # ou "playwright"
SEARCH_TYPES = ["academia", "restaurante"]   # Tipos a buscar
MAX_RESULTS_PER_TYPE = 20                    # Limite por tipo
OUTPUT_JSON = "data/resultados.json"
OUTPUT_EXCEL = "data/resultados.xlsx"

⚠️ Limitações Conhecidas

  • Selenium em Google Maps: Google bloqueia browser controlado
  • API Key: Requer chave válida com APIs habilitadas
  • Web Scraping v1/v2: Maps é SPA dinâmico, seletores CSS falham
  • Playwright Real: Google pode bloquear em padrões de acesso contínuo
  • Realista: Dados são mockados, mas coerentes e realistas

🎓 O que Aprender com Este Projeto

Padrões e Práticas

  • Factory Pattern - Estratégias intercambiáveis
  • Logging estruturado - Rastreabilidade completa
  • Exportação de dados - JSON + planilhas
  • CLI interativa - UX em terminal
  • Error handling - Recuperação graceful

Tecnologias

  • Selenium - Browser automation (RPA)
  • Playwright - Browser automation moderno
  • BeautifulSoup - DOM parsing
  • Google Places API - Integração com APIs
  • Pandas - Exportação Excel
  • Logging - Sistema de logs

Para Entrevista

"Implementei 7 estratégias diferentes. A padrão é confiável (26 registros), mas mostro Playwright real para dados REAIS. Cada estratégia ensina trade-offs: Selenium falha em SPA, API precisa de chave, Web Scraping puro não passa proteções. O resultado é um projeto robusto e educacional."


📝 Logs

Execute com DEBUG:

# Ver arquivo logs/app.log
cat logs/app.log

Exemplo de log:

2026-01-30 12:01:35 | DEBUG | Logger inicializado
2026-01-30 12:01:35 | INFO | Modo rápido ativado | Estratégia: web-scraping-realista
2026-01-30 12:01:35 | INFO | Iniciando busca por: academia
2026-01-30 12:01:35 | INFO | Concluído: academia (8 registros)

🔗 Próximos Passos (Opcional)

  • Adicionar fallback: Playwright → Realista se bloqueado
  • Proxy rotation para Playwright
  • Cache de contexto para velocidade
  • Detecção automática de bloqueios
  • Retry com backoff exponencial
  • Validação de API key antes de executar

📄 Licença

Portfolio pessoal - Sem restrições


Última atualização: Jan 30, 2026
Versão: 1.0 (Production-ready) ✅
Criador: @osmar

Para mais detalhes, veja ESTRATEGIAS.md

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages