TechMatch es una plataforma integral de comparación de hardware que permite a los usuarios encontrar y comparar componentes de PC y laptops. El sistema utiliza bots de web scraping para extraer automáticamente especificaciones técnicas desde las páginas oficiales de los fabricantes y precios actualizados desde tiendas online reconocidas.
- Catálogo Automatizado: Mantenimiento automático de productos, especificaciones y precios mediante web scraping.
- Comparador Inteligente: Herramienta de comparación de hardware basada en perfiles de uso.
- Gestión de Usuarios: Registro, autenticación y sistema de favoritos/comparaciones guardadas.
- Arquitectura Modular: Separación clara entre el motor de extracción de datos (Scrapers), la API de negocio (Backend) y la interfaz de usuario (Frontend).
El proyecto está diseñado bajo un enfoque modular, dividiendo las responsabilidades en distintas capas:
Desarrollado en PHP, HTML, CSS y JavaScript. Se encarga de la interfaz de usuario, interactuando de forma dinámica con la API REST del backend para mostrar el catálogo, el comparador y gestionar las sesiones de los usuarios.
Desarrollado en Python con Flask. Expone los endpoints necesarios para el frontend. Implementa una arquitectura en capas:
- Controladores (App): Manejo de rutas y peticiones HTTP (
app.py). - Servicios: Lógica de negocio y procesamiento de datos.
- DAO (Data Access Object): Capa exclusiva para la comunicación segura con la base de datos MySQL (
producto_dao.py,usuario_dao.py, etc.). - Modelos: Representación orientada a objetos de las entidades (Productos, Laptops, CPUs, Usuarios).
Un conjunto de scripts automatizados en Python (utilizando Selenium y BeautifulSoup) orquestados por run_bots.py.
- Scrapers de Especificaciones: Extraen datos técnicos de sitios oficiales (ej. ASUS, Lenovo, AMD, Intel).
- Scrapers de Retailers: Extraen precios y disponibilidad de tiendas online (ej. MercadoLibre, Compra Gamer).
Base de datos relacional MySQL centralizada. Almacena de manera estructurada las relaciones entre productos, categorías, marcas, perfiles de uso, tiendas y especificaciones técnicas.
- Frontend: PHP, HTML5, CSS3, JavaScript.
- Backend: Python 3.x, Flask, Flask-CORS.
- Scraping: Selenium WebDriver, BeautifulSoup4, Requests, lxml.
- Base de Datos: MySQL (Conector:
mysql-connector-python). - Seguridad:
bcryptpara el hasheo de contraseñas.
/
├── backend/ # API REST y Motor de Scraping
│ ├── app.py # Punto de entrada de la API Flask
│ ├── config.py # Configuraciones del sistema y BD
│ ├── run_bots.py # Orquestador del motor de scraping
│ ├── Requerimientos.txt # Dependencias de Python
│ ├── dao/ # Data Access Objects (Capa de Base de Datos)
│ ├── database/ # Conexión a MySQL (Patrón Singleton)
│ ├── modelos/ # Clases de dominio (Producto, Laptop, Usuario, etc.)
│ ├── scrapers/ # Scripts de extracción de datos (Bots)
│ └── servicios/ # Lógica de negocio (Auth, Comparaciones, etc.)
├── frontend/ # Interfaz de Usuario en PHP
│ ├── index.php / etc. # Vistas y lógica de presentación
│ ├── assets/ # Recursos estáticos (CSS, JS, Imágenes)
│ └── componentes/ # Componentes reutilizables de UI
└── sql/ # Scripts de base de datos
- Servidor Web para PHP (ej. Laragon, XAMPP).
- Python 3.8 o superior.
- MySQL Server.
- Navegador Chrome (para Selenium).
- Navegar al directorio
backend:cd backend - Crear un entorno virtual e instalar las dependencias:
python -m venv venv source venv/bin/activate # En Windows: venv\Scripts\activate pip install -r Requerimientos.txt
- Configurar las variables de entorno o editar
config.pycon las credenciales de la base de datos. - Iniciar el servidor Flask:
python app.py
- Colocar el contenido de la carpeta
frontenden el directorio público del servidor web (ej.wwwen Laragon ohtdocsen XAMPP). - Asegurarse de que las llamadas a la API en JS apunten a la URL correcta del backend (por defecto
http://localhost:5000/api/).
Para actualizar el catálogo con los últimos productos y precios, ejecutar el orquestador de bots:
cd backend
python run_bots.pyEste script ejecutará secuencialmente:
- Bots de Retailers: Actualización de precios desde tiendas.
- Bots de Fabricantes (Laptops): Extracción de specs de equipos completos.
- Bots de Fabricantes (Componentes): Extracción de specs de piezas individuales (CPUs, etc.).
POST /api/register: Registro de nuevos usuarios.POST /api/login: Autenticación de usuarios.GET /api/productos: Obtener el catálogo filtrado (soporta parámetroscategoria,perfil,busqueda).GET /api/comparar: Comparar dos productos (requiereidA,idByperfil).