Um sistema avançado de extração de leads capaz de coletar dados de médicos e estabelecimentos comerciais do Doctoralia e Google Maps. O scraper investiga profundamente cada resultado, acessando websites e redes sociais para encontrar contatos valiosos como WhatsApp, E-mail e Instagram.
- Busca Especializada: Filtros por especialidade e cidade.
- Paginação Automática: Coleta milhares de perfis de uma só vez.
- Modo Expansão Inteligente: Busca automática em 20+ capitais se a cidade não for definida (ideal para metas de 5000+ leads).
- Investigação de Websites: Acessa o site do estabelecimento para extrair:
- 📸 Instagram (username direto)
- 📱 WhatsApp / Telefone
- 🏢 CNPJ
- Extração via URL: Otimização que extrai dados diretamente do link sem precisar carregar a página (mais rápido).
- Filtro Inteligente: Ignora páginas irrelevantes (Login, Privacy Policy) e prioriza páginas de Contato e Bio.
- Rotação de Proxy Robusta: Suporte a SOCKS5 com retry automático e fallback.
- Interface Web Moderna: Painel de controle com resultados ao vivo (WebSocket).
- Exportação Flexível: Dados em CSV e JSON.
- Anti-Detecção Avançada: Simula comportamento humano e rotaciona fingerprint do navegador.
- Node.js (versão 14 ou superior)
- npm (geralmente vem com Node.js)
- Windows, macOS ou Linux
-
Clone ou baixe este repositório
-
Navegue até o diretório do projeto
cd "Screpy Doctoralia"
-
Instale as dependências
No Windows:
npm.cmd install
No macOS/Linux:
npm install
Isso instalará todas as dependências necessárias:
express- Servidor websocket.io- Comunicação em tempo realpuppeteer- Automação do navegadorpuppeteer-extra- Extensões para Puppeteerpuppeteer-extra-plugin-stealth- Plugin anti-detecçãocors- Habilitação de CORS
No Windows:
npm.cmd startNo macOS/Linux:
npm startO servidor será iniciado em http://localhost:3000
-
Abra seu navegador e acesse
http://localhost:3000 -
Escolha o Modo:
- Doctoralia: Ideal para médicos e profissionais de saúde.
- Google Maps: Ideal para clínicas, estéticas e qualquer comércio local.
-
Preencha os filtros:
- Termo/Especialidade: O que você procura?
- Cidade: Deixe EM BRANCO para ativar o Modo Expansão (busca no Brasil todo).
- Quantidade: Defina a meta (até 5000).
-
Configurações Extras (Maps):
- "Investigar websites": Ative para o robô entrar nos sites e buscar WhatsApp/Instagram.
- "Dados Obrigatórios": Marque "WhatsApp" para salvar apenas leads que tenham Zap.
-
Clique em "Iniciar Extração"
-
Acompanhe o progresso em tempo real:
- Status atual da operação
- Barra de progresso
- Log detalhado de atividades
-
Baixe os resultados:
- Após a conclusão, clique em "Baixar CSV"
- O arquivo será salvo com todas as informações extraídas
O arquivo CSV conterá as seguintes colunas:
| Coluna | Descrição |
|---|---|
| Nome | Nome completo do médico |
| Especialidades | Lista de especialidades (separadas por ponto e vírgula) |
| Numero Fixo | Número de telefone fixo |
| Numero Movel | Número de telefone móvel/celular |
| Enderecos | Lista de endereços de atendimento (separados por ponto e vírgula) |
Screpy Doctoralia/
├── api/
│ ├── apiMiddleware.js # Autenticação via API Key
│ ├── apiRoutes.js # Endpoints REST
│ └── webhookService.js # Serviço de webhooks
├── scraper/
│ ├── browser.js # Gerenciamento do navegador com Stealth
│ ├── search.js # Lógica de busca e coleta de URLs
│ ├── profile.js # Extração de dados dos perfis
│ ├── manager.js # Gerenciador de múltiplos scrapers
│ ├── utils.js # Funções utilitárias (delays, comportamento humano)
│ └── index.js # Controlador principal do scraper
├── public/
│ ├── index.html # Interface web
│ ├── script.js # Lógica do cliente (Socket.io)
│ └── style.css # Estilos da interface
├── docs/
│ ├── API.md # Documentação da API
│ └── DEPLOY.md # Guias de deploy
├── results/ # Pasta onde os CSVs são salvos
├── server.js # Servidor Express + Socket.io
├── Dockerfile # Configuração Docker
├── package.json # Configurações e dependências
└── README.md # Este arquivo
O sistema inclui uma API REST completa para integração com outros sistemas.
Todas as requisições requerem uma API Key no header:
X-API-Key: sua-api-key-aqui
A API Key é gerada automaticamente na primeira execução e exibida:
- No terminal ao iniciar o servidor
- Na interface web (clique no ícone 🔑)
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /api/v1/scrape |
Iniciar extração |
| GET | /api/v1/scrape/:id |
Consultar status/resultado |
| GET | /api/v1/history |
Listar histórico |
# Iniciar extração
curl -X POST http://localhost:3000/api/v1/scrape \
-H "Content-Type: application/json" \
-H "X-API-Key: sua-api-key" \
-d '{"city":"São Paulo","quantity":10,"onlyWithPhone":true}'
# Consultar resultado
curl http://localhost:3000/api/v1/scrape/ID_DA_EXTRACAO \
-H "X-API-Key: sua-api-key"📚 Documentação completa: docs/API.md
Por padrão, o servidor roda na porta 3000. Para alterar:
- Abra o arquivo
server.js - Modifique a linha:
const PORT = process.env.PORT || 3000;
- Ou defina a variável de ambiente
PORT:PORT=8080 npm start
O navegador roda em modo headless (invisível) por padrão. Para visualizar o navegador durante a execução:
- Abra
scraper/browser.js - Altere a linha:
Para:
headless: 'new',
headless: false,
Para tornar o scraper mais rápido ou mais lento:
- Abra
scraper/utils.js - Modifique a função
randomDelay:function randomDelay(min = 1000, max = 3000) { // Reduza os valores para mais velocidade // Aumente para ser mais cauteloso }
O scraper implementa várias técnicas para evitar detecção:
- Stealth Plugin: Mascara características do Puppeteer
- User-Agent Real: Simula um navegador Chrome real
- Delays Aleatórios: Tempo variável entre ações
- Movimentos de Mouse: Simula comportamento humano
- Digitação Natural: Digita caractere por caractere com delays
- Headers Customizados: Headers HTTP realistas
- Uso Responsável: Use esta ferramenta de forma ética e responsável
- Rate Limiting: Evite fazer muitas requisições em curto período
- Termos de Serviço: Verifique os termos de serviço do Doctoralia
- Bloqueios: Mesmo com anti-detecção, bloqueios podem ocorrer com uso excessivo
- Dados Pessoais: Os dados extraídos podem conter informações pessoais - trate-os com cuidado
- Verifique se a especialidade e cidade estão escritas corretamente
- Tente termos mais genéricos (ex: "Médico" ao invés de especialidade específica)
- Verifique sua conexão com a internet
No Windows, pode ser necessário instalar ferramentas de build:
npm install --global windows-build-tools- Verifique se o Chrome/Chromium está instalado
- Tente executar com
headless: falsepara ver erros visuais
- Verifique se a porta 3000 não está em uso
- Desabilite firewalls/antivírus temporariamente para testar
- Velocidade: ~5-10 perfis por minuto (dependendo da complexidade)
- Memória: ~200-500 MB durante execução
- CPU: Uso moderado (Puppeteer é intensivo)
Possíveis melhorias:
- Suporte a múltiplos navegadores simultâneos (via Manager)
- Proxy rotation para evitar bloqueios
- Exportação em JSON
- API REST para integração
- Google Maps Scraper
- Investigação de Websites (Deep Crawl)
- Modo Expansão Global
Este projeto é fornecido "como está" para fins educacionais.
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests.
Para problemas ou dúvidas, abra uma issue no repositório.
Desenvolvido com ❤️ para extração eficiente de dados do Doctoralia