Python para Web Scraping: Como Identificar Dados de Contato Rapidamente com Regex

 

Como Extrair E-mails e Telefones de um Texto Usando Python

Extrair dados de contato não estruturados em grandes volumes de texto é um desafio comum em automações de scraping, higienização de cadastros e triagem de mensagens. Este script utiliza o módulo nativo re (Expressões Regulares) para varrer qualquer string e extrair instantaneamente listas de e-mails e números de telefone formatados. A solução resolve a busca manual repetitiva e padroniza a coleta de dados de contatos de forma automatizada.

Python
import re

def extrair_contatos(texto: str) -> dict:
    """Identifica e extrai todos os e-mails e telefones contidos em um bloco de texto."""
    # Regex para capturar e-mails (padrão padrão usuario@dominio.com)
    padrao_email = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'

    # Regex para telefones nos formatos: (11) 99999-9999, 11 99999-9999 ou 99999-9999
    padrao_telefone = r'\(?\d{2}\)?\s?\d{4,5}[-\s]?\d{4}'

    # re.findall retorna uma lista com todas as ocorrências encontradas
    emails_encontrados = re.findall(padrao_email, texto)
    telefones_encontrados = re.findall(padrao_telefone, texto)

    # Retorna os contatos limpos e sem duplicatas
    return {
        "emails": list(set(emails_encontrados)),
        "telefones": list(set(telefones_encontrados))
    }

# --- Exemplo de uso prático ---
if __name__ == "__main__":
    massa_de_texto = """
    Olá, favor entrar em contato com suporte@empresa.com.br ou pelo setor
    comercial no e-mail contato.vendas@empresa.com.
    Ligue para (11) 98765-4321 ou envie mensagem para 41 99999-8888.
    Atendimento secundário: suporte@empresa.com.br.
    """

    resultado = extrair_contatos(massa_de_texto)

    print("E-mails extraídos:", resultado["emails"])
    print("Telefones extraídos:", resultado["telefones"])

Pontos-chave

  • re.findall(): Busca todas as correspondências do padrão Regex no texto e retorna uma lista simples de strings contendo as capturas.

  • Remoção de Duplicatas com set(): Ao converter o resultado de re.findall para um conjunto (set), descartamos automaticamente contatos repetidos que apareçam múltiplas vezes no mesmo texto.

  • Flexibilidade do Padrão de Telefones: A expressão \(?\d{2}\)?\s?\d{4,5}[-\s]?\d{4} acomoda variações comuns de formato, como presença ou ausência de DDD entre parênteses, hífen e o nono dígito.

  • Escape de Caracteres Especiais: Símbolos como pontos (.) e parênteses (( e )) têm significados especiais no Regex e devem ser escapados com barra invertida (\., \() quando o objetivo for validar o caractere literal.


Comentários

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Python para Computação Quântica: Introdução com Qiskit

C# e Banco de Dados: Como Conectar e Realizar Operações com SQL Server