- Base de datos SQLite con información de vehículos - Dashboard web con Flask y Bootstrap - Scripts de web scraping para RockAuto - Interfaz CLI para consultas - Documentación completa del proyecto Incluye: - 12 marcas de vehículos - 10,923 modelos - 10,919 especificaciones de motores - 12,075 combinaciones modelo-año-motor
307 lines
9.2 KiB
Markdown
307 lines
9.2 KiB
Markdown
# Autoparts DB
|
|
|
|
Sistema completo de gestión de base de datos de vehículos y autopartes con dashboard web, herramientas de web scraping y múltiples interfaces de consulta.
|
|
|
|
## Descripción
|
|
|
|
**Autoparts DB** es una solución integral para la gestión de información de vehículos que incluye:
|
|
|
|
- Base de datos SQLite normalizada con información de marcas, modelos, motores y años
|
|
- Dashboard web moderno y responsivo para consultar y explorar datos
|
|
- Herramientas de web scraping para recopilar datos de RockAuto.com
|
|
- Interfaces de línea de comandos (CLI) y programática
|
|
- Scripts de utilidad para gestión y mantenimiento de datos
|
|
|
|
## Estadísticas de la Base de Datos
|
|
|
|
| Elemento | Cantidad |
|
|
|----------|----------|
|
|
| Marcas | 12 |
|
|
| Modelos | 10,923 |
|
|
| Motores | 10,919 |
|
|
| Combinaciones modelo-año-motor | 12,075 |
|
|
|
|
## Tecnologías Utilizadas
|
|
|
|
### Backend
|
|
- **Python 3** - Lenguaje principal
|
|
- **SQLite 3** - Base de datos
|
|
- **Flask 2.3.3** - Framework web
|
|
- **BeautifulSoup4** - Web scraping
|
|
- **requests** - HTTP client
|
|
- **lxml** - Parser XML/HTML
|
|
|
|
### Frontend
|
|
- **HTML5** - Estructura
|
|
- **Bootstrap 5.3.0** - Framework CSS
|
|
- **JavaScript (ES6+)** - Lógica cliente
|
|
- **Font Awesome 6.0.0** - Iconos
|
|
|
|
## Estructura del Proyecto
|
|
|
|
```
|
|
Autopartes/
|
|
├── vehicle_database/ # Sistema principal de base de datos
|
|
│ ├── sql/
|
|
│ │ └── schema.sql # Esquema de la base de datos
|
|
│ ├── scripts/
|
|
│ │ ├── database_manager.py # Gestión de la BD
|
|
│ │ ├── query_interface.py # Interfaz CLI
|
|
│ │ └── csv_importer.py # Importador CSV
|
|
│ ├── data/
|
|
│ │ ├── brands.csv # Datos de marcas
|
|
│ │ ├── engines.csv # Datos de motores
|
|
│ │ └── models.csv # Datos de modelos
|
|
│ ├── vehicle_database.db # Base de datos SQLite
|
|
│ └── setup.sh # Script de inicialización
|
|
│
|
|
├── dashboard/ # Interfaz web
|
|
│ ├── server.py # Backend Flask
|
|
│ ├── index.html # Frontend HTML
|
|
│ ├── dashboard.js # Lógica JavaScript
|
|
│ └── start_dashboard.sh # Script de inicio
|
|
│
|
|
├── vehicle_scraper/ # Herramientas de web scraping
|
|
│ ├── rockauto_scraper.py # Scraper RockAuto
|
|
│ ├── rockauto_scraper_v2.py # Scraper mejorado
|
|
│ ├── scrape_toyota.py # Scraper Toyota
|
|
│ ├── scrape_nissan_ford_chevrolet.py
|
|
│ └── manual_input.py # Ingreso manual
|
|
│
|
|
├── add_*.py # Scripts para agregar datos
|
|
├── remove_*.py # Scripts de limpieza
|
|
└── QUICK_START.sh # Guía rápida de inicio
|
|
```
|
|
|
|
## Instalación
|
|
|
|
### Requisitos Previos
|
|
|
|
- Python 3.8 o superior
|
|
- pip (gestor de paquetes de Python)
|
|
|
|
### Pasos de Instalación
|
|
|
|
1. **Clonar el repositorio**
|
|
```bash
|
|
git clone https://git.consultoria-as.com/[usuario]/Autoparts-DB.git
|
|
cd Autoparts-DB
|
|
```
|
|
|
|
2. **Instalar dependencias**
|
|
```bash
|
|
pip install flask requests beautifulsoup4 lxml
|
|
```
|
|
|
|
3. **Inicializar la base de datos (opcional - ya incluye datos)**
|
|
```bash
|
|
cd vehicle_database
|
|
./setup.sh
|
|
```
|
|
|
|
## Uso
|
|
|
|
### Iniciar el Dashboard Web
|
|
|
|
```bash
|
|
cd dashboard
|
|
python3 server.py
|
|
```
|
|
|
|
El dashboard estará disponible en: `http://localhost:5000`
|
|
|
|
### Usar la Interfaz CLI
|
|
|
|
```bash
|
|
cd vehicle_database/scripts
|
|
python3 query_interface.py
|
|
```
|
|
|
|
### Ejecutar Web Scraping
|
|
|
|
```bash
|
|
cd vehicle_scraper
|
|
python3 rockauto_scraper_v2.py
|
|
```
|
|
|
|
### Agregar Datos Manualmente
|
|
|
|
```bash
|
|
cd vehicle_scraper
|
|
python3 manual_input.py
|
|
```
|
|
|
|
## API REST
|
|
|
|
El dashboard expone los siguientes endpoints:
|
|
|
|
| Endpoint | Método | Descripción |
|
|
|----------|--------|-------------|
|
|
| `/api/brands` | GET | Obtiene todas las marcas |
|
|
| `/api/models?brand=X` | GET | Obtiene modelos por marca |
|
|
| `/api/years` | GET | Obtiene años disponibles |
|
|
| `/api/engines` | GET | Obtiene motores disponibles |
|
|
| `/api/vehicles` | GET | Búsqueda con filtros |
|
|
|
|
### Ejemplo de Uso
|
|
|
|
```bash
|
|
# Obtener todas las marcas
|
|
curl http://localhost:5000/api/brands
|
|
|
|
# Buscar vehículos por marca y año
|
|
curl "http://localhost:5000/api/vehicles?brand=Toyota&year=2020"
|
|
```
|
|
|
|
## Esquema de Base de Datos
|
|
|
|
### Tablas
|
|
|
|
#### brands
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | INTEGER | Clave primaria |
|
|
| name | TEXT | Nombre de la marca |
|
|
| country | TEXT | País de origen |
|
|
| founded_year | INTEGER | Año de fundación |
|
|
|
|
#### models
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | INTEGER | Clave primaria |
|
|
| brand_id | INTEGER | FK a brands |
|
|
| name | TEXT | Nombre del modelo |
|
|
| body_type | TEXT | Tipo de carrocería |
|
|
| generation | TEXT | Generación |
|
|
| production_start_year | INTEGER | Año inicio producción |
|
|
| production_end_year | INTEGER | Año fin producción |
|
|
|
|
#### engines
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | INTEGER | Clave primaria |
|
|
| name | TEXT | Nombre del motor |
|
|
| displacement_cc | INTEGER | Cilindrada en cc |
|
|
| cylinders | INTEGER | Número de cilindros |
|
|
| fuel_type | TEXT | Tipo de combustible |
|
|
| power_hp | INTEGER | Potencia en HP |
|
|
| torque_nm | INTEGER | Torque en Nm |
|
|
| engine_code | TEXT | Código del motor |
|
|
|
|
#### years
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | INTEGER | Clave primaria |
|
|
| year | INTEGER | Año |
|
|
|
|
#### model_year_engine
|
|
| Campo | Tipo | Descripción |
|
|
|-------|------|-------------|
|
|
| id | INTEGER | Clave primaria |
|
|
| model_id | INTEGER | FK a models |
|
|
| year_id | INTEGER | FK a years |
|
|
| engine_id | INTEGER | FK a engines |
|
|
| trim_level | TEXT | Nivel de equipamiento |
|
|
| drivetrain | TEXT | Tracción |
|
|
| transmission | TEXT | Transmisión |
|
|
|
|
### Diagrama de Relaciones
|
|
|
|
```
|
|
brands ──┐
|
|
│
|
|
├──< models ──┐
|
|
│ │
|
|
years ───┼─────────────┼──< model_year_engine
|
|
│ │
|
|
engines ─┴─────────────┘
|
|
```
|
|
|
|
## Scripts Disponibles
|
|
|
|
### Scripts de Datos
|
|
|
|
| Script | Descripción |
|
|
|--------|-------------|
|
|
| `add_toyota_data.py` | Agrega datos de Toyota |
|
|
| `add_honda_data.py` | Agrega datos de Honda |
|
|
| `add_nissan_data.py` | Agrega datos de Nissan |
|
|
| `add_ford_data.py` | Agrega datos de Ford |
|
|
| `add_chevrolet_data.py` | Agrega datos de Chevrolet |
|
|
| `add_audi_data.py` | Agrega datos de Audi |
|
|
| `add_acura_data.py` | Agrega datos de Acura |
|
|
| ... | Y más marcas |
|
|
|
|
### Scripts de Mantenimiento
|
|
|
|
| Script | Descripción |
|
|
|--------|-------------|
|
|
| `remove_brands_and_cleanup.py` | Limpia marcas innecesarias |
|
|
| `check_and_remove_brands.py` | Verifica y elimina marcas |
|
|
|
|
## Funcionalidades del Dashboard
|
|
|
|
### Panel de Filtros
|
|
- Selección de marca
|
|
- Selección de modelo (dinámico según marca)
|
|
- Filtro por año
|
|
- Filtro por motor
|
|
|
|
### Panel de Resultados
|
|
- Visualización en tarjetas
|
|
- Información detallada del vehículo
|
|
- Especificaciones del motor
|
|
- Datos de transmisión y tracción
|
|
|
|
### Características
|
|
- Diseño responsivo
|
|
- Actualización en tiempo real
|
|
- Animaciones y transiciones suaves
|
|
- Soporte para múltiples idiomas
|
|
|
|
## Arquitectura del Sistema
|
|
|
|
```
|
|
┌─────────────────┐ ┌──────────────────┐
|
|
│ RockAuto.com │────>│ Web Scraper │
|
|
└─────────────────┘ └────────┬─────────┘
|
|
│
|
|
v
|
|
┌─────────────────┐ ┌──────────────────┐
|
|
│ Manual Input │────>│ SQLite Database │
|
|
└─────────────────┘ └────────┬─────────┘
|
|
│
|
|
┌───────────────────────┼───────────────────────┐
|
|
│ │ │
|
|
v v v
|
|
┌─────────────────┐ ┌──────────────────┐ ┌──────────────────┐
|
|
│ Flask API │ │ CLI Interface │ │ CSV Importer │
|
|
└────────┬────────┘ └──────────────────┘ └──────────────────┘
|
|
│
|
|
v
|
|
┌─────────────────┐
|
|
│ Web Dashboard │
|
|
│ (Browser) │
|
|
└─────────────────┘
|
|
```
|
|
|
|
## Contribuir
|
|
|
|
1. Fork el repositorio
|
|
2. Crea una rama para tu feature (`git checkout -b feature/nueva-funcionalidad`)
|
|
3. Commit tus cambios (`git commit -am 'Agrega nueva funcionalidad'`)
|
|
4. Push a la rama (`git push origin feature/nueva-funcionalidad`)
|
|
5. Crea un Pull Request
|
|
|
|
## Licencia
|
|
|
|
Este proyecto es de uso interno.
|
|
|
|
## Contacto
|
|
|
|
Para más información, contactar al equipo de desarrollo.
|
|
|
|
---
|
|
|
|
**Autoparts DB** - Sistema de Gestión de Base de Datos de Vehículos
|