Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@ scrape_folha:
scrape_jornaldaparaiba:
docker compose exec scraper python scrape_no_openai.py --platform jornaldaparaiba.com.br

scrape_brasildefato:
docker compose exec scraper python scrape_no_openai.py --platform brasildefato.com.br


# Crawler para todos os portais ou específicos
crawl:
Expand Down Expand Up @@ -121,9 +124,13 @@ crawl_ig:
crawl_folha:
docker compose run scraper python crawl.py folhaspider

crawl_brasildefato:
docker compose run scraper python crawl.py brasildefato

crawl_jornaldaparaiba:
docker compose run scraper python crawl.py jornaldaparaiba


# Workflow completo de coleta de URLs
crawl_all_working:
@echo "Executando crawl de todos os portais funcionais..."
Expand All @@ -135,6 +142,7 @@ crawl_all_working:
@make crawl_aliadosBrasil
@make crawl_ig
@make crawl_folha
@make crawl_brasildefato
@make crawl_jornaldaparaiba
@echo "Crawl de todos os portais concluído!"

Expand All @@ -149,6 +157,7 @@ scrape_all_working:
@make scrape_r7
@make scrape_uol
@make scrape_folha
@make scrape_brasildefato
@make scrape_jornaldaparaiba
@echo "Scraping de todos os portais concluído!"

Expand Down Expand Up @@ -197,6 +206,7 @@ help:
@echo " make crawl_aliadosBrasil - Coleta URLs do portal AliadosBrasil"
@echo " make crawl_ig - Coleta URLs do portal IG"
@echo " make crawl_folha - Coleta URLs do portal Folha"
@echo " make crawl_brasildefato - Coleta URLs do portal Brasil de Fato"
@echo ""
@echo "=== COMANDOS DE SCRAPING (Extração de Anúncios) ==="
@echo " make scrape_all_working - Executa scraping de todos os portais funcionais"
Expand All @@ -208,6 +218,7 @@ help:
@echo " make scrape_r7 - Scraping do portal R7"
@echo " make scrape_uol - Scraping do portal UOL"
@echo " make scrape_folha - Scraping do portal Folha"
@echo " make scrape_brasildefato - Scraping do portal Brasil de Fato"
@echo ""
@echo "=== WORKFLOWS COMPLETOS ==="
@echo " make pipeline_complete - Executa crawl + scraping de todos os portais"
Expand Down
88 changes: 75 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Check-up

![cover](https://raw.githubusercontent.com/aosfatos/check-up/refs/heads/develop/cover.png)

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.
Expand All @@ -15,6 +16,7 @@ Este projeto foi adaptado a partir de uma ferramenta original do [**Aos Fatos**]
### 🏗️ Arquitetura

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

Expand All @@ -25,16 +27,20 @@ O código pode ser facilmente adaptado para novos portais de notícia, seguindo
## 🚀 Como Rodar o Projeto

### 📋 Pré-requisitos

- Docker e Docker Compose instalados
- Make (disponível por padrão no macOS e Linux)

### 🔧 Configuração Inicial

**1. Setup completo do ambiente:**

```bash
make setup
```

Este comando faz toda a configuração inicial:

- Cria o arquivo `.env` a partir do `env.example`
- Inicia os serviços Docker (PostgreSQL, MinIO, scraper)
- Aguarda o banco de dados ficar pronto
Expand All @@ -48,30 +54,35 @@ 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:

```bash
make crawl_all_working
```

Ou execute individualmente:

```bash
make crawl_metropoles # Portal Metrópoles
make crawl_veja # Portal Veja
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
make crawl_brasildefato # Portal Brasil de Fato
```

**📰 Etapa 2: Scraping (Extração de Conteúdo das Notícias)**

Execute a extração de conteúdo de todos os portais:

```bash
make scrape_all_working
```

Ou execute por portal específico:

```bash
make scrape_metropoles # Extração do Metrópoles
make scrape_maisgoias # Extração do MaisGoiás
Expand All @@ -81,11 +92,13 @@ 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 Folha
make scrape_brasildefato # Extração do Brasil de Fato
```

### 📋 Conteúdo Extraído

Para 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
Expand All @@ -94,47 +107,54 @@ Para cada notícia, o sistema extrai:
### ⚡ Workflows Automatizados

**Pipeline completo (crawl + scraping):**

```bash
make pipeline_complete
```

**Coleta otimizada:**

```bash
make collect_working
```

### 🛠️ Comandos Úteis

**Acessar o container:**

```bash
make bash
```

**Ver logs dos serviços:**

```bash
docker compose logs -f
```

**Parar serviços:**

```bash
make stop
```

**Ver todos os comandos disponíveis:**

```bash
make help
```

### � Onde os Dados São Salvos

- **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
- **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`

### � Configurações Importantes

**Variáveis de ambiente (arquivo `.env`):**

- Credenciais dos portais (se necessário)
- Configurações do banco PostgreSQL
- Configurações do MinIO para armazenamento
Expand All @@ -147,16 +167,19 @@ make help
Este projeto coleta dados dos seguintes portais brasileiros:

### ✅ **Portais Funcionais** (Totalmente operacionais)

- **[Metrópoles](https://www.metropoles.com)** - `make crawl_metropoles` / `make scrape_metropoles`
- **[IG](https://www.ig.com.br)** - `make crawl_ig` / `make scrape_ig`
- **[IG](https://www.ig.com.br)** - `make crawl_ig` / `make scrape_ig`
- **[MaisGoiás](https://www.maisgoias.com.br)** - `make crawl_maisgoias` / `make scrape_maisgoias`
- **[AliadosBrasil](https://www.aliadosbrasiloficial.com.br)** - `make crawl_aliadosBrasil` / `make scrape_aliadosbrasil`
- **[Veja](https://veja.abril.com.br)** - `make crawl_veja` / `make scrape_veja`
- **[R7](https://www.r7.com)** - `make crawl_r7` / `make scrape_r7`
- **[UOL](https://www.uol.com.br)** - `make crawl_uol` / `make scrape_uol`
- **[Folha](https://www.folha.uol.com.br)** - `make crawl_folha` / `make scrape_folha`
- **[Brasil de Fato](https://www.brasildefato.com.br)** - `make crawl_brasildefato` / `make scrape_brasildefato`

### 🔧 **Em Desenvolvimento**

- **[Estadão](https://www.estadao.com.br)** - Necessita ajustes nos seletores CSS
- **[Globo](https://oglobo.globo.com/)** - Requer configurações específicas de autenticação
- **[RBS](https://www.clicrbs.com.br)** - Spider em desenvolvimento
Expand All @@ -175,19 +198,48 @@ As seguintes tabelas são criadas automaticamente durante o setup:

## 🧑‍💻 Desenvolvimento e Contribuição

Quer contribuir para o projeto? Consulte nosso **[Guia de Contribuição](./.github/CONTRIBUTING.md)** completo que inclui:
### 🐳 Build Docker e Troubleshooting

- O `Dockerfile` usa 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`

### 🧪 Estrutura de Spiders e Plays

- 🔄 Fluxo de contribuição
- 🛠️ Como criar novos scrapers ou adaptar existentes
- 🐛 Como reportar bugs e sugerir melhorias
- 📚 Guias de estilo (commits e PRs)
- 📋 Templates de issues e labels
- 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

### 📚 Guias de Contribuição

**⚠️ IMPORTANTE**: Antes de contribuir, leia os tutoriais apropriados:

- **[TUTORIAL_CRIACAO_DO_ZERO.md](./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](./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

### 📝 Fluxo de Contribuição

- 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 `main` ou `develop`

## 🚨 Troubleshooting

### Problemas Comuns

**1. Erro "Playwright browsers not installed"**

```bash
# Se o IG spider falhar, reconstrua a imagem Docker:
docker compose down
Expand All @@ -196,6 +248,7 @@ make start
```

**2. Container não conecta ao banco**

```bash
# Aguarde o banco ficar pronto:
make wait-for-db
Expand All @@ -204,13 +257,15 @@ make stop && make start
```

**3. MinIO não acessível**

```bash
# Verifique se o MinIO está rodando:
docker compose ps
# Acesse: http://localhost:9001 (admin: minioadmin/minioadmin)
```

**4. Containers órfãos**

```bash
# Limpe containers órfãos:
docker compose down --remove-orphans
Expand All @@ -220,6 +275,7 @@ make prune
### 💡 Exemplos Práticos

**Coleta rápida de um portal específico:**

```bash
# Setup inicial (só uma vez)
make setup
Expand All @@ -230,21 +286,24 @@ make scrape_metropoles
```

**Pipeline completo para produção:**

```bash
# Coleta de todos os portais funcionais
make pipeline_complete
```

**Monitoramento em tempo real:**

```bash
# Terminal 1 - Execute a coleta
make crawl_all_working

# Terminal 2 - Monitore os logs
# Terminal 2 - Monitore os logs
docker compose logs -f scraper
```

**Acesso aos dados coletados:**

```bash
# Via container
make bash
Expand All @@ -259,13 +318,15 @@ open http://localhost:9001
```

### 2- Executar as migrações do banco de dados

Para 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.

### 3- Coletar URL de notícias

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]("https://www.folha.uol.com.br"): `spiders/folha.py`.
Expand All @@ -285,6 +346,7 @@ Para executar a extração de todas as notícias:
### 5- Adicionar um Novo Portal

Para adicionar um novo portal, consulte o **[TUTORIAL_SPIDERS_PLAYS.md](./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
Expand All @@ -295,15 +357,15 @@ Para adicionar um novo portal, consulte o **[TUTORIAL_SPIDERS_PLAYS.md](./TUTORI
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`.

## Importante
Os scripts dependem da estrutura HTML dos portais e podem precisar de ajustes após atualizações nos sites.

Os scripts dependem da estrutura HTML dos portais e podem precisar de ajustes após atualizações nos sites.

## Executando um spider específico

Para executar apenas um spider específico, você pode passar o nome do spider como argumento:

```
docker compose run scraper python crawl.py metropolesspider
docker compose run scraper python crawl.py metropolesspider
```

Para verificar o banco de dados, você pode executar o seguinte comando:
Expand Down Expand Up @@ -335,4 +397,4 @@ make clean

# Ver todos os comandos disponíveis
make help
```
```
1 change: 1 addition & 0 deletions create_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
("Mais Goiás", "https://www.maisgoias.com.br/", "maisgoias"),
("Aliados Brasil", "https://www.aliadosbrasiloficial.com.br/", "aliadosbrasil"),
("Jornal da Paraíba", "https://jornaldaparaiba.com.br/", "jornaldaparaiba"),
("Brasil de Fato", "https://www.brasildefato.com.br/", "brasildefato"),
]
portals_to_add = []
for portal in portals:
Expand Down
Loading