image

Acesse bootcamps ilimitados e +750 cursos pra sempre

70
%OFF
Isadora Ariane
Isadora Ariane09/06/2026 10:46
Compartilhe

Web Scraping & OSINT Techniques

    Como extrair dados de um site sem DOM mas com embedded API/JSON, hidden endpoints e JavaScript-rendered components?

    #01 Introdução

    Recentemente, precisei coletar indicadores de monitoramento de desinformação disponibilizados pelo projeto Radar Aos Fatos. O objetivo era simples: gerar um relatório semanal contendo algumas métricas específicas para análise posterior de outro projeto pessoal.

    Em um primeiro instante cogitei utilizar web scraping pelo simples fato do conteúdo estar disponível em uma página web aberta ao público. No entanto, após investigar a estrutura da mesma, percebi que teria de ter outra abordagem.

    #02 O Problema

    A página disponibiliza diferentes abas contendo informações provenientes de:

    • WhatsApp
    • Web
    • YouTube
    • Telegram

    Em cada um deles há o cálculo de uma média analisando a qualidade do conteúdo proveniente de grupos, páginas e seu respectivo conteúdo. Tais métricas estão disponibilizadas em uma mesma estrutura relativamente simples, mas os dados não são carregados pelo carregador e disponibilizados diretamente no HTML. Esse comportamento é característico de aplicações modernas as quais utilizam frameworks em JavaScript e comumente chamamos de componentes dinâmicos.

    Mas o diferencial dessa estrutura, dessa página em específico, é a inexistência de DOM (Direct Object Model), pois até mesmo ele é um componente renderizado por javascript - parabéns aos programadores!

    #03 Investigando o Tráfego de Rede

    De uma coisa eu sei: se o navegador consegue exibir os dados, então ele também precisa recebê-los de alguma fonte.

    A partir dessa premissa mudei minha estratégia, ao invés de tentar extrair elementos da interface, utilizei as ferramentas de desenvolvedor do navegador para localizar de onde essas informações estavam sendo carregadas.

    3.1. Abrir o DevTools

    Inspecione a página (botão direito, F12 ou CTRL + I).

    3.2. Acessar a aba Network

    Na aba Network, filtre as requisições por:

    Fetch/XHR
    

    3.3 Navegar entre as abas do sistema

    Ao alternar entre WhatsApp, Web, YouTube e Telegram, novas requisições começaram a aparecer sendo possível encontrar os hidden endpoints responsáveis pelo fornecimento dos dados.

    #04 Descobrindo a API

    Os dados eram disponibilizados através de endpoints REST diferentes à URL da página:

    https://radar-api.aosfatos.org/api/panorama/whatsapp/
    

    Cada aba possuí um URL próprio:

    /api/panorama/web/
    /api/panorama/youtube/
    /api/panorama/telegram/
    

    #05 Entendendo o JSON

    Ao acessar um dos endpoints foi possível obter a seguinte estrutura:

    {
    "count": 920,
    "next": "...",
    "results": [...],
    "average_grade": 3.3,
    "count_messages": 14059,
    "count_groups": 153,
    "count_bad_messages": 1355
    }
    

    Os indicadores que eu precisava eram:

    • average_grade
    • count_messages
    • count_groups

    Como esses campos estavam na raiz do JSON, poderiam ser acessados diretamente.

    Exemplo usando JSONPath:

    $.average_grade
    $.count_messages
    $.count_groups
    

    #06 Automatizando com Python

    Primeiro, criamos um dicionário contendo as URLs de cada canal:

    URLS = {
    "WhatsApp": "...",
    "Web": "...",
    "YouTube": "...",
    "Telegram": "..."
    }
    

    Em seguida, realizamos as requisições:

    import requests
    
    response = requests.get(url)
    dados = response.json()
    

    Extraímos os indicadores desejados:

    {
      "Canal": canal,
      "Average Grade": dados["average_grade"],
      "Count Messages": dados["count_messages"],
      "Count Groups": dados["count_groups"]
    }
    

    #07 Gerando um Relatório

    Utilizando Pandas:

    import pandas as pd
    
    df = pd.DataFrame(relatorio)
    

    #08 Agendando a Execução Semanal

    Com o script pronto, o próximo passo foi automatizar sua execução.

    Algumas opções incluem:

    • Agendador de Tarefas do Windows
    • Cron no Linux
    • GitHub Actions
    • Serviços de automação como n8n

    Dessa forma, o relatório pode ser gerado automaticamente todos os domingos, sem intervenção manual.

    #09 Lições Aprendidas

    Durante esse processo, algumas lições ficaram claras:

    9.1. Nem todo problema exige web scraping

    Muitas aplicações modernas consomem APIs públicas ou semipúblicas. Antes de construir um scraper complexo, vale a pena investigar as requisições realizadas pelo navegador.

    9.2. DevTools é uma ferramenta poderosa

    Muitas vezes, a resposta está na aba Network. Entender como inspecionar requisições pode economizar horas de desenvolvimento.

    9.3. APIs tornam a automação mais robusta

    Consumir diretamente a fonte dos dados costuma ser:

    • Mais rápido
    • Mais estável
    • Mais simples de manter

    #10 Conclusão

    Ao investigar o funcionamento da aplicação, foi possível substituir uma estratégia de scraping por uma solução baseada em APIs REST. Além de simplificar a implementação, isso permitiu criar uma automação semanal capaz de gerar relatórios estruturados para análise futura. Esse tipo de abordagem pode ser aplicado em diversos projetos de monitoramento, Business Intelligence, ciência de dados e automação de processos.

    Compartilhe
    Recomendados para você
    Bootcamp Corpay - Back-end do Zero a Prática
    GFT - Fundamentos de Cloud com AWS
    Bootcamp Bradesco - GenAI, Dados & Cyber
    Comentários (0)