O Check-up é um projeto de extração de conteúdo de notícias de portais brasileiros para análise de desinformação. Este repositório contém ferramentas para coletar e extrair o texto completo de notícias de diversos portais de notícia do Brasil.
Este projeto foi adaptado a partir de uma ferramenta original do Aos Fatos que analisava anúncios publicitários. Agora, o foco é na extração de conteúdo de notícias para posterior análise de fake news por uma equipe especializada.
- Antes: Coletava anúncios publicitários para verificar fake news
- Agora: Extrai conteúdo completo de notícias (título, descrição, corpo, tags) para análise de desinformação
A ferramenta possui dois módulos principais:
- Crawler (Spiders): Coleta URLs de notícias das páginas iniciais dos portais
- Extrator (Plays): Acessa cada notícia e extrai o conteúdo completo
O código pode ser facilmente adaptado para novos portais de notícia, seguindo os padrões estabelecidos.
Licença: Este código pode ser usado apenas para fins não-comerciais e com atribuição de crédito.
- Docker e Docker Compose instalados
- Make (disponível por padrão no macOS e Linux)
1. Setup completo do ambiente:
make setupEste comando faz toda a configuração inicial:
- Cria o arquivo
.enva partir doenv.example - Inicia os serviços Docker (PostgreSQL, MinIO, scraper)
- Aguarda o banco de dados ficar pronto
- Cria as tabelas necessárias
- Executa as migrações
O processo de extração acontece em duas etapas principais:
🕷️ Etapa 1: Crawling (Coleta de URLs de Notícias)
Colete URLs de notícias de todos os portais funcionais:
make crawl_all_workingOu execute individualmente:
make crawl_metropoles # Portal Metrópoles
make crawl_veja # Portal Veja
make crawl_r7 # Portal R7
make crawl_uol # Portal UOL
make crawl_maisgoias # Portal MaisGoiás
make crawl_aliadosBrasil # Portal AliadosBrasil
make crawl_ig # Portal IG
make crawl_folha # Portal Folha📰 Etapa 2: Scraping (Extração de Conteúdo das Notícias)
Execute a extração de conteúdo de todos os portais:
make scrape_all_workingOu execute por portal específico:
make scrape_metropoles # Extração do Metrópoles
make scrape_maisgoias # Extração do MaisGoiás
make scrape_aliadosbrasil # Extração do AliadosBrasil
make scrape_ig # Extração do IG
make scrape_veja # Extração da Veja
make scrape_r7 # Extração do R7
make scrape_uol # Extração do UOL
make scrape_folha # Extração da FolhaPara cada notícia, o sistema extrai:
- Título: Título principal da notícia
- Descrição: Subtítulo ou resumo da notícia
- Corpo: Texto completo da matéria
- Tags: Categorias e etiquetas associadas à notícia
Pipeline completo (crawl + scraping):
make pipeline_completeColeta otimizada:
make collect_workingAcessar o container:
make bashVer logs dos serviços:
docker compose logs -fParar serviços:
make stopVer todos os comandos disponíveis:
make help- URLs coletadas: Salvos no banco PostgreSQL (tabela
URLQueue) - Notícias extraídas: Salvos no banco PostgreSQL (tabela
Entry) com título, descrição, corpo e tags - Arquivos temporários: Salvos no MinIO (acessível em
http://localhost:9001) - Logs: Disponíveis via
docker compose logs
Variáveis de ambiente (arquivo .env):
- Credenciais dos portais (se necessário)
- Configurações do banco PostgreSQL
- Configurações do MinIO para armazenamento
- Configurações de timeout e retry para extração
Este projeto coleta dados dos seguintes portais brasileiros:
- Metrópoles -
make crawl_metropoles/make scrape_metropoles - IG -
make crawl_ig/make scrape_ig - MaisGoiás -
make crawl_maisgoias/make scrape_maisgoias - AliadosBrasil -
make crawl_aliadosBrasil/make scrape_aliadosbrasil - Veja -
make crawl_veja/make scrape_veja - R7 -
make crawl_r7/make scrape_r7 - UOL -
make crawl_uol/make scrape_uol - Folha -
make crawl_folha/make scrape_folha
- Estadão - Necessita ajustes nos seletores CSS
- Globo - Requer configurações específicas de autenticação
- RBS - Spider em desenvolvimento
- Terra - Aguardando implementação
As seguintes tabelas são criadas automaticamente durante o setup:
- Portal: Informações dos portais analisados
- Entry: Notícias coletadas de cada portal com título, descrição, corpo e tags
- URLQueue: Fila de URLs para o processo de scraping
- QueueStatus: Status de cada fila de scraping
Nota: Mais detalhes sobre a estrutura das tabelas estão disponíveis no arquivo models.py.
- O
Dockerfileusa multi-stage build com instalação automática dos browsers do Playwright - Para build manual:
docker build -t check-up:latest . - Para acessar o container:
make bash
- Cada portal tem um spider Scrapy (
spiders/) e um script Playwright (plays/) - Para adicionar novo portal, siga o modelo dos arquivos existentes
- O scraping aceita argumentos de timeout e plataforma via CLI
-
TUTORIAL_CRIACAO_DO_ZERO.md - Para criar scrapers completamente novos:
- Guia passo-a-passo desde a análise do portal
- Exemplos práticos com código completo
- Troubleshooting e problemas comuns
- Testes e validação
-
TUTORIAL_SPIDERS_PLAYS.md - Para adaptar scrapers existentes:
- Guia para adaptar spiders e plays existentes
- Checklist de validação para garantir qualidade
- Exemplos práticos de boas práticas
- Dicas para identificar seletores atualizados
- Siga as políticas de branches e commits do projeto
- Use Conventional Commits e Git Flow
- Sempre rode os testes antes de abrir PR
- Nunca faça push direto para
mainoudevelop
1. Erro "Playwright browsers not installed"
# Se o IG spider falhar, reconstrua a imagem Docker:
docker compose down
docker compose build --no-cache
make start2. Container não conecta ao banco
# Aguarde o banco ficar pronto:
make wait-for-db
# Ou reinicie os serviços:
make stop && make start3. MinIO não acessível
# Verifique se o MinIO está rodando:
docker compose ps
# Acesse: http://localhost:9001 (admin: minioadmin/minioadmin)4. Containers órfãos
# Limpe containers órfãos:
docker compose down --remove-orphans
make pruneColeta rápida de um portal específico:
# Setup inicial (só uma vez)
make setup
# Coleta do Metrópoles (exemplo)
make crawl_metropoles
make scrape_metropolesPipeline completo para produção:
# Coleta de todos os portais funcionais
make pipeline_completeMonitoramento em tempo real:
# Terminal 1 - Execute a coleta
make crawl_all_working
# Terminal 2 - Monitore os logs
docker compose logs -f scraperAcesso aos dados coletados:
# Via container
make bash
python -c "
from models import *
print('URLs coletadas:', URLQueue.select().count())
print('Anúncios encontrados:', Advertisement.select().count())
"
# Via MinIO Console
open http://localhost:9001Para executar as migrações do banco de dados, utilize:
make migrate_db
Este comando irá aplicar todas as migrações pendentes no banco de dados.
O primeiro passo é coletar URLs de notícias nas páginas iniciais dos portais. Cada portal possui um "spider" implementado com a biblioteca Scrapy, localizado no diretório spiders/.
Exemplo de script para a Folha: spiders/folha.py.
Para executar a coleta de todos os portais, utilize:
make crawl
Após a coleta das URLs, o próximo passo é extrair o conteúdo completo das notícias. Esse processo utiliza a biblioteca Playwright para simular a navegação em um browser.
Para executar a extração de todas as notícias:
make scrape
Para adicionar um novo portal, consulte o TUTORIAL_SPIDERS_PLAYS.md que contém instruções detalhadas sobre:
- Como criar spiders para coleta de URLs
- Como criar plays para extração de conteúdo
- Exemplos práticos e boas práticas
- Checklist de validação
Os dados extraídos são armazenados no banco PostgreSQL e arquivos temporários no MinIO. Para configurações específicas de armazenamento, consulte o arquivo .env.
Os scripts dependem da estrutura HTML dos portais e podem precisar de ajustes após atualizações nos sites.
Para executar apenas um spider específico, você pode passar o nome do spider como argumento:
docker compose run scraper python crawl.py metropolesspider
Para verificar o banco de dados, você pode executar o seguinte comando:
docker compose run scraper python check_db.py
# Setup inicial (só uma vez)
make setup
# Iniciar serviços
make start
# Coletar URLs de um portal específico
make crawl_metropoles # ou qualquer outro portal de notícias
# Extrair conteúdo das notícias
make scrape_metropoles # ou qualquer outro portal de notícias
# Parar serviços
make stop
# Limpar serviços
make clean
# Ver todos os comandos disponíveis
make help