Skip to content

dimyakk/web-scraping-capstone

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🛎️ Web Scraping Capstone -

Pipeline de scraping y sincronizacion de Hoteles y Pousadas en Maceió'

Este proyecto automatiza la recolección de datos de hoteles desde la web haciendo scraping con Selenium, enriquece esos datos usando la API de Google Places, y finalmente sincroniza la información resultante con una hoja de Google Sheets mediante la API de Sheety.

🧭 Tabla de Contenidos


🚀 Características

Automatización completa del proceso de scraping

  • Navegación automatizada con Selenium.
  • Interacción con elementos dinámicos (botones, menús, hover, scroll, etc.).
  • Manejo de tiempos de carga dinámicos con WebDriverWait.

Extracción estructurada de datos

  • Obtención de información de cada hotel: dirección, teléfono, email, sitio web, etc.
  • Limpieza y normalización de datos antes de almacenarlos.
  • Manejo de páginas con estructuras variables.

Arquitectura modular

  • Código dividido en módulos: scraper, servicios, utils, configuración, logs.
  • Clases dedicadas para cada servicio (API, Sheets, JSON, etc.).
  • Fácil mantenimiento y extensibilidad.

Integración con APIs externas

  • Enriquecimiento de datos a través de Geocode y Google Places.
  • Envío de datos a Google Sheets mediante Sheety API. Alternativa: guardado local en .json.

Pipeline de procesamiento

  • Flujo completo desde la obtención de datos hasta el almacenamiento final.
  • Manejo de errores y reintentos.

Configuración mediante archivos .env

  • Variables sensibles aisladas: API keys, URLs, credenciales.
  • Carga automática en el proyecto mediante config.py. Aquí tambien se encuentran otras variables no sensibles.

Registro detallado de ejecución

  • Logging configurado con distintos niveles (INFO, WARNING, ERROR).
  • Guardado automático de logs en archivos con nombre por fecha.

Compatibilidad y requerimientos

  • Probado con Selenium + ChromeDriver.
  • Compatible con Python 3.10+.
  • Todas las dependencias se encuentran en requeriments.txt

Facilidad de uso

  • Ejecución del scraping con un único comando (python main.py).
  • Instrucciones de instalación claras.
  • README completo para reproducir el proyecto.

🧱 Estructura del proyecto

Web Scraping Capstone/
│
├── data/
    ├──
    ├──
├── logs/
    ├── archivos.log
├── models/
    ├── hotel.py
├── scrapers/
    ├── abihal_scraper.py
    ├── base_scraper.py    
├── services/
    ├── google_apis.py
    ├── google_client.py
    ├── sheety_api.py
├── utils /
    ├── driver_factory.py
    ├── enrich_hotels.py
    ├── file_manage.py
    ├── hotel_lloader.py
    ├── logger.py
├── .env
├── config.py
├── main.py
├── README.md
├── requeriments.txt

---

Arquitectura / Flujo del Proyecto

  1. Carga variables de entorno.
  2. Ejecuta AbihalScraper para obtener datos de hoteles.
  3. Guarda datos en JSON.
  4. Enriquecimiento con Google Places.
  5. Sincronización con Sheety.

⚙️ Requisitos

  • Python 3.8+
  • Selenium
  • Webdriver-manager
  • Python-dotenv
  • Googlemaps
  • Requests
  • Pydantic

📦 Instalación y Configuración

# 1. Clonar el repositorio
git clone https://github.com/dimyakk/web-scraping-with-selenium.git
cd web-scraping-with-selenium

# 2. Crear y activar entorno virtual
python -m venv .venv
# En Linux / Mac
source .venv/bin/activate     
# o en Windows:
.venv\Scripts\activate

# 3. Instalar dependencias
pip install -r requirements.txt

# 4. Configura el archivo .env y config.py
API_ENDPOINT=...
API_TOKEN=...
SHEET_NAME=...
BASE_URL=...
#Recordar poner las variables sensibles en .env

▶️ Uso

# Ejecutar el script principal
python main.py

El script realizara un pipeline completo de la siguiente manera:

  1. Accede a la web y extrae los datos de la clase Hotel, guardandolos en un JSON.
  2. Realiza una solicitud HTTP a la API Geocode (obtiene latitud y longitud de los lugares)
  3. Realiza otra solicitud HTTP a la API Google Places con lat y lon para enriquecer los hoteles, creando un nuevo JSON.
  4. Finaliza haciendo un POST a Sheety API para guardar los datos enriquecidos de cada Hotel.

🧠 Detalles técnicos

  • Lenguaje: Python 3.12+
  • Librerías:
    • selenium
    • python-dotenv
    • time
    • random
    • json
    • logging
    • os
    • requests
    • googlemaps
    • pydantic
    • typing
  • Principales clases y métodos:
    • BaseScraper → clase base para hacer scraping en Selenium.
    • AbihalScraper → clase para el scrap en la web.
    • hotel → modelo de hotel.
    • google_client y google_apis → ambas sirven para hacer la solicitud a las API's de Google.
    • sheety_api → llamada a la Sheety API.
    • create_driver → función que crea el driver.
    • enrich_hotels → script para crear un nuevo JSON con datos enriquecidos.
    • save_json → función para guardar el JSON.
    • get_logger → función para acceder al logger.

👨‍💻 Autor

Joaquín Albano
Estudiante de programación y entusiasta de la automatización con Python.
📧 Contacto: [jalbano1998@gmail.com]


📄 Licencia

MIT License
Este proyecto puede ser usado, modificado y distribuido libremente con atribución al autor original.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages