Pipeline ETL Python : Scraping Books to Scrape
Découvrez une architecture modulaire pour un projet de scraping Python utilisant Requests et BeautifulSoup selon un pipeline ETL (Extract, Transform, Load).
Projet : Scraping de données – Books to Scrape
Formation OpenClassrooms – Python Pipeline ETL
Python | Requests | BeautifulSoup | CSV
Objectifs du Projet
Développer une application Python respectant un pipeline ETL (Extract, Transform, Load).
Extraire toutes les catégories de livres
Scraper les données produit complètes
Gérer automatiquement la pagination
Générer un fichier CSV par catégorie
Vision Globale
Application entièrement automatisée et reproductible.
Accès à la page d’accueil
Extraction des catégories
Parcours des catégories
Scraping des pages produit
Sauvegarde des données et images
Architecture Modulaire & DRY
project/ │ ├── main.py (Orchestrator) ├── scraper_utils.py (Common Logic) ├── requirements.txt │ ├── scraped_data/ │ ├── csv/ (Travel.csv, ...) │ └── images/ (book_upc.jpg, ...)
Séparation des responsabilités : Chaque fichier a un rôle unique.
DRY (Don't Repeat Yourself) : Logique commune dans utils.
Évolutivité : Code plus lisible et facile à maintenir.
Pipeline ETL Global
E: EXTRACT
Scraping HTML avec Requests & BeautifulSoup. Catégories, Produits, URLs.
T: TRANSFORM
Nettoyage (strip), Normalisation URLs, Gestion des valeurs manquantes ('N/A').
L: LOAD
Génération CSV par catégorie et téléchargement des images (UPC).
Phase Extract
Requests : Récupération du brut HTML
BeautifulSoup : Parsing et Navigation DOM
<h1> : Titre du Livre
<table> : Données produit (UPC, Prix)
<div class='image_container'> : URLs Images
Phase Transform : Nettoyage
Normalisation des URLs : Relatives (../../) vers Absolues (http)
Nettoyage texte : Strip() des espaces, suppression caractères unicodes
Valeurs manquantes : Remplacement par 'N/A' pour éviter les crashs
Phase Load : CSV & Images
Outputs CSV
Un fichier par catégorie (ex: Mystery.csv). Contient l'ensemble des métadonnées produits structurées.
Outputs Images
Téléchargement binaire propre. Nommage par UPC (ex: a897fe39b.jpg) pour éviter les doublons.
Démonstration & Menu Interactif
1. Scraper un livre 2. Scraper une catégorie 3. Tout scraper 4. Télécharger images
Permet de tester et déboguer chaque phase indépendamment sans relancer tout le pipeline.
Bonnes Pratiques Git
.gitignore essentiel :
Exclusion du dossier 'scraped_data/' et 'venv/'
Pourquoi ?
Les données générées ne sont pas versionnées. Repository propre et léger.
Améliorations Futures
Data Quality
Conversion des notes textuelles ('Five') en chiffres (5) pour analyse.
Robustesse
Gestion avancée des erreurs et logging pour le débogage.
Performance & Éthique
Ajout de délais (time.sleep) pour limiter la charge serveur.
Stockage
Transition du CSV vers une base de données (SQLite/PostgreSQL).
Conclusion & Perspectives
Projet conforme aux attentes ETL
Architecture modulaire et maintenable
Améliorations Futures : SQL, Logs Asynchrones
- python
- web-scraping
- etl-pipeline
- beautifulsoup
- data-engineering
- openclassrooms
- csv