https://github.com/vicktorms/rio_event_scraper
https://github.com/vicktorms/rio_event_scraper
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/vicktorms/rio_event_scraper
- Owner: VicktorMS
- Created: 2024-11-30T23:33:05.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-12-01T00:41:58.000Z (over 1 year ago)
- Last Synced: 2025-02-10T14:35:14.145Z (over 1 year ago)
- Language: Python
- Size: 113 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Event Scraper
O **Event Scraper** é uma aplicação console desenvolvida em Python que coleta, armazena e permite a consulta de eventos culturais do Rio de Janeiro. Utilizando técnicas de scraping e uma interface de menu interativa, o projeto visa fornecer uma ferramenta eficiente para explorar eventos, suas datas, locais e outros metadados relevantes.
---
## 🚀 Funcionalidades
- **Scraping de Dados**: Coleta informações de eventos diretamente de uma fonte online.
- **Armazenamento de Dados**: Utiliza SQLite para armazenar dados de eventos e seus metadados.
- **Interface de Menu**: Oferece uma interface interativa para executar scraping e realizar consultas.
- **Consultas Avançadas**:
- Exibir todos os eventos.
- Mostrar os dois eventos mais próximos de iniciar.
- Listar eventos que ocorrem no Rio de Janeiro.
- Exibir eventos ao ar livre.
- Mostrar metadados por evento.
- **Logs Detalhados**: Registra todas as operações para facilitar a depuração e monitoramento.
---
## 🛠️ Tecnologias Utilizadas
- **Linguagem de Programação**: Python 3.12
- **ORM**: Peewee
- **Banco de Dados**: SQLite
- **Bibliotecas de Scraping**: `requests`, `urlib`,`beautifulsoup4`
- **Gerenciamento de Logs**: `logging`
- **Ambiente Virtual**: `venv`
---
## ⚙️ Pré-requisitos
Antes de começar, certifique-se de ter instalado as seguintes ferramentas em seu sistema:
- **Python 3.12** ou superior
- **Git** (para clonagem do repositório)
- **Ambiente Virtual** (opcional, mas recomendado)
---
## 🔧 Instalação
### 1. Clone o Repositório
Abra o terminal e execute o seguinte comando para clonar o repositório:
```bash
git clone https://github.com/VicktorMS/Rio_Event_Scraper.git
cd Rio_Event_Scraper
```
### 2. Crie um Ambiente Virtual
É recomendado utilizar um ambiente virtual para isolar as dependências do projeto.
```bash
python3 -m venv venv
```
### 3. Ative o Ambiente Virtual
- **No Linux/macOS:**
```bash
source venv/bin/activate
```
- **No Windows:**
```bash
venv\Scripts\activate
```
### 4. Instale as Dependências
Com o ambiente virtual ativado, instale as dependências necessárias:
```bash
pip install -r requirements.txt
```
---
## 📋 Estrutura do Projeto
A seguir, uma visão geral da estrutura de diretórios e arquivos do projeto:
```
Rio_Event_Scraper/
├── src/
│ ├── main.py
│ ├── config.py
│ ├── scraper/
│ │ └── scraper.py
│ ├── db/
│ │ ├── database.py
│ │ └── models/
│ │ ├── event.py
│ │ ├── event_data.py
│ │ └── metadata.py
│ ├── queries/
│ │ └── database_queries.py
│ └── menu/
│ └── menu.py
├── logs/
│ └── scraper.log
├── requirements.txt
└── README.md
```
- **src/**: Contém todo o código fonte do projeto.
- **main.py**: Ponto de entrada da aplicação.
- **config.py**: Configurações do projeto, como caminhos de arquivos e URLs.
- **scraper/**: Módulo responsável por coletar dados de eventos.
- **scraper.py**: Implementação do scraper.
- **db/**: Configuração do banco de dados e modelos.
- **database.py**: Configuração da conexão com o banco de dados.
- **models/**: Definição dos modelos ORM.
- **event.py**: Modelo do Evento.
- **event_data.py**: Modelo dos Dados do Evento.
- **metadata.py**: Modelo de Metadados.
- **queries/**: Módulo contendo funções para consultas SQL.
- **database_queries.py**: Implementação das consultas.
- **menu/**: Implementação da interface de menu.
- **menu.py**: Classes e funções relacionadas ao menu interativo.
- **logs/**: Diretório onde os logs da aplicação são armazenados.
- **scraper.log**: Arquivo de log principal.
- **requirements.txt**: Lista de dependências do projeto.
- **README.md**: Este arquivo de documentação.
---
## 🎯 Como Utilizar
### 1. Ative o Ambiente Virtual
Caso ainda não tenha ativado o ambiente virtual, faça-o agora:
- **No Linux/macOS:**
```bash
source venv/bin/activate
```
- **No Windows:**
```bash
venv\Scripts\activate
```
### 2. Execute a Aplicação
Com o ambiente virtual ativo, inicie a aplicação executando o módulo `main.py`:
```bash
python3 -m src.main
```
### 3. Interaja com o Menu
Ao iniciar, você verá o seguinte menu no console:
```
=== Menu Principal ===
1. Executar Scraper
2. Mostrar Todos os Eventos
3. Mostrar os 2 Eventos Mais Próximos de Iniciar
4. Mostrar Eventos no Rio de Janeiro
5. Mostrar Eventos ao Ar Livre
6. Mostrar Metadados por Evento
7. Ver Logs
8. Sair
=======================
Selecione uma opção:
```
#### 3.1. Executando o Scraper
**Opção 1: Executar Scraper**
Esta opção coleta dados de eventos a partir da fonte especificada e os armazena no banco de dados.
**Exemplo de Uso:**
```
Selecione uma opção: 1
```
**Saída Esperada:**
```
Iniciando scraping...
Scraping concluído. Retornando ao menu principal.
```
#### 3.2. Mostrar Todos os Eventos
**Opção 2: Mostrar Todos os Eventos**
Exibe uma lista completa de todos os eventos armazenados, incluindo datas, localizações e tipos.
**Exemplo de Uso:**
```
Selecione uma opção: 2
```
**Saída Esperada:**
```
--- Todos os Eventos ---
Nome: Festival de Música
Tipo: Música
Descrição: Festival anual de música ao vivo.
Data: 2024-12-20
Localização: Parque Central
---------------------------
Nome: Exposição de Arte Moderna
Tipo: Arte
Descrição: Exposição de obras contemporâneas.
Data: 2024-12-25
Localização: Museu de Arte do Rio
---------------------------
...
```
#### 3.3. Mostrar os 2 Eventos Mais Próximos de Iniciar
**Opção 3: Mostrar os 2 Eventos Mais Próximos de Iniciar**
Exibe os dois eventos que estão mais próximos de ocorrer, com base na data atual.
**Exemplo de Uso:**
```
Selecione uma opção: 3
```
**Saída Esperada:**
```
--- 2 Eventos Mais Próximos de Iniciar ---
Nome: Festival de Música
Tipo: Música
Descrição: Festival anual de música ao vivo.
Data: 2024-12-20
Localização: Parque Central
---------------------------
Nome: Concerto de Jazz
Tipo: Música
Descrição: Concerto de jazz ao ar livre.
Data: 2024-12-22
Localização: Praça Mauá
---------------------------
```
#### 3.4. Mostrar Eventos no Rio de Janeiro
**Opção 4: Mostrar Eventos no Rio de Janeiro**
Lista todos os eventos que ocorrem no Rio de Janeiro.
**Exemplo de Uso:**
```
Selecione uma opção: 4
```
**Saída Esperada:**
```
--- Eventos no Rio de Janeiro ---
Nome: Exposição de Arte Moderna
Tipo: Arte
Descrição: Exposição de obras contemporâneas.
Data: 2024-12-25
Localização: Museu de Arte do Rio
---------------------------
Nome: Concerto de Jazz
Tipo: Música
Descrição: Concerto de jazz ao ar livre.
Data: 2024-12-22
Localização: Praça Mauá, Rio de Janeiro
---------------------------
...
```
#### 3.5. Mostrar Eventos ao Ar Livre
**Opção 5: Mostrar Eventos ao Ar Livre**
Exibe todos os eventos que são realizados ao ar livre.
**Exemplo de Uso:**
```
Selecione uma opção: 5
```
**Saída Esperada:**
```
--- Eventos ao Ar Livre ---
Nome: Festival de Música
Tipo: Música
Descrição: Festival anual de música ao vivo.
Data: 2024-12-20
Localização: Parque Central
Tipo de Evento: Ao ar livre
---------------------------
Nome: Concerto de Jazz
Tipo: Música
Descrição: Concerto de jazz ao ar livre.
Data: 2024-12-22
Localização: Praça Mauá, Rio de Janeiro
Tipo de Evento: Ao ar livre
---------------------------
...
```
#### 3.6. Mostrar Metadados por Evento
**Opção 6: Mostrar Metadados por Evento**
Apresenta todos os metadados associados a cada evento, organizados por nome do evento.
**Exemplo de Uso:**
```
Selecione uma opção: 6
```
**Saída Esperada:**
```
--- Metadados por Evento ---
Evento: Festival de Música
event_type: Ao ar livre
organizer: XYZ Eventos
sponsors: ABC Corp
---------------------------
Evento: Exposição de Arte Moderna
event_type: Indoor
organizer: ArteRio
sponsors: ArteCorp
---------------------------
...
```
#### 3.7. Ver Logs
**Opção 7: Ver Logs**
Exibe o conteúdo do arquivo de log para monitorar as operações da aplicação.
**Exemplo de Uso:**
```
Selecione uma opção: 7
```
**Saída Esperada:**
```
--- Logs do Scraper ---
2024-12-01 10:15:30,123 - INFO - main - Iniciando o aplicativo...
2024-12-01 10:15:30,124 - INFO - menu - Opção selecionada: Mostrar Todos os Eventos
2024-12-01 10:15:30,125 - INFO - queries.database_queries - Total de eventos: 2
2024-12-01 10:15:30,126 - INFO - queries.database_queries - Total de dados de eventos: 2
2024-12-01 10:15:30,127 - INFO - menu - Consulta 'Mostrar Todos os Eventos' concluída.
...
--- Fim dos Logs ---
```
#### 3.8. Sair
**Opção 8: Sair**
Encerra a aplicação.
**Exemplo de Uso:**
```
Selecione uma opção: 8
```
**Saída Esperada:**
```
Encerrando o aplicativo. Até logo!
```
---
## 📂 Estrutura do Banco de Dados
O banco de dados utilizado é o **SQLite**, organizado em duas principais tabelas: `event` e `event_data`. Além disso, há uma tabela de `metadata` para armazenar informações adicionais sobre os eventos.
### 1. Tabela `event`
Armazena informações básicas sobre cada evento.
| Campo | Tipo | Descrição |
|--------------|----------------|--------------------------------------|
| `id` | AutoField | Identificador único do evento. |
| `name` | CharField | Nome do evento. |
| `type` | TextField | Tipo do evento (e.g., Música, Arte). |
| `description`| CharField (Null)| Descrição do evento. |
| `created_at` | DateTimeField | Data e hora de criação do registro. |
### 2. Tabela `event_data`
Armazena informações específicas de cada ocorrência de um evento.
| Campo | Tipo | Descrição |
|------------|---------------|---------------------------------------------|
| `id` | AutoField | Identificador único dos dados do evento. |
| `event_id` | ForeignKeyField | Referência ao `id` da tabela `event`. |
| `date` | DateTimeField | Data e hora do evento. |
| `location` | TextField | Localização do evento. |
### 3. Tabela `metadata`
Armazena metadados adicionais para cada evento.
| Campo | Tipo | Descrição |
|------------|---------------|----------------------------------|
| `id` | AutoField | Identificador único do metadado. |
| `event_id` | ForeignKeyField | Referência ao `id` da tabela `event`. |
| `key` | CharField | Chave do metadado (e.g., `event_type`). |
| `value` | TextField | Valor do metadado (e.g., `Ao ar livre`). |
---
## 📝 Consultas Disponíveis
### 1. Mostrar Todos os Eventos
**Descrição**: Exibe uma lista completa de todos os eventos armazenados, incluindo suas datas, localizações e tipos.
**Função**: `get_all_events()`
### 2. Mostrar os 2 Eventos Mais Próximos de Iniciar
**Descrição**: Exibe os dois eventos que estão mais próximos de ocorrer, com base na data atual.
**Função**: `get_upcoming_events(limit=2)`
### 3. Mostrar Eventos no Rio de Janeiro
**Descrição**: Lista todos os eventos que ocorrem no Rio de Janeiro.
**Função**: `get_events_in_rio()`
### 4. Mostrar Eventos ao Ar Livre
**Descrição**: Exibe todos os eventos que são realizados ao ar livre.
**Função**: `get_outdoor_events()`
### 5. Mostrar Metadados por Evento
**Descrição**: Apresenta todos os metadados associados a cada evento, organizados por nome do evento.
**Função**: `get_metadata_per_event()`
---
## 📈 Logs
A aplicação utiliza a biblioteca `logging` para registrar informações importantes sobre a execução do scraper e das consultas. Os logs são armazenados no arquivo `src/logs/scraper.log`.
**Tipos de Logs:**
- **INFO**: Informações gerais sobre a execução.
- **WARNING**: Avisos sobre condições inesperadas que não impedem a execução.
- **ERROR**: Erros que impedem a conclusão de uma operação.
- **DEBUG**: Informações detalhadas para depuração (opcional, dependendo da configuração).
**Exemplo de Entrada de Log:**
```
2024-12-01 10:15:30,123 - INFO - main - Iniciando o aplicativo...
2024-12-01 10:15:30,124 - INFO - menu - Opção selecionada: Mostrar Todos os Eventos
2024-12-01 10:15:30,125 - INFO - queries.database_queries - Total de eventos: 2
2024-12-01 10:15:30,126 - INFO - queries.database_queries - Total de dados de eventos: 2
2024-12-01 10:15:30,127 - INFO - menu - Consulta 'Mostrar Todos os Eventos' concluída.
...
```
---
## 🔍 Depuração
Em caso de problemas durante a execução das consultas ou do scraper, os logs fornecem informações detalhadas que podem auxiliar na identificação e resolução de erros.
### Passos para Depuração:
1. **Verifique os Logs:**
Abra o arquivo de log para identificar mensagens de erro ou avisos.
```bash
cat src/logs/scraper.log
```
2. **Analise as Mensagens de Erro:**
As mensagens de erro geralmente incluem o tipo de erro e a linha do código onde ocorreu, facilitando a localização do problema.
3. **Verifique a Estrutura do Banco de Dados:**
Assegure-se de que as tabelas e os relacionamentos estão corretamente configurados.
4. **Teste Individualmente as Funções:**
Execute as funções de consulta individualmente para isolar o problema.
5. **Revisite as Definições dos Modelos:**
Garanta que os modelos ORM (`Event`, `EventData`, `Metadata`) estão corretamente definidos com os relacionamentos adequados.
## 📄 Licença
Este projeto está licenciado sob a [MIT License](LICENSE).
---