9.8 KiB
Executable File
📦 PriceWatch - Récapitulatif de livraison
Version : 0.1.0 Date : 2026-01-13 Phase : 1 - CLI de base Statut : ✅ COMPLÉTÉE
📊 Statistiques
- 2328 lignes de code Python
- 18 modules Python
- 6 fichiers de documentation
- 2 stores implémentés (Amazon, Cdiscount)
- 5 commandes CLI
- 100% des objectifs Phase 1 atteints
📁 Fichiers livrés
Documentation (6 fichiers)
├── README.md Documentation complète du projet
├── QUICKSTART.md Guide de démarrage rapide
├── TODO.md Roadmap phases 1-5
├── CHANGELOG.md Historique des modifications v0.1.0
├── CLAUDE.md Guide pour futures instances Claude Code
└── PROJECT_SPEC.md Spécifications détaillées (original)
Configuration
├── pyproject.toml Configuration package + dépendances
├── scrap_url.yaml Fichier de configuration exemple
└── .gitignore Fichiers à ignorer (venv, cache, etc.)
Code source (18 modules Python)
pricewatch/
├── __init__.py
└── app/
├── __init__.py
├── core/ # Modules centraux
│ ├── __init__.py
│ ├── schema.py # Modèle ProductSnapshot (Pydantic)
│ ├── logging.py # Logs colorés
│ ├── io.py # Lecture YAML / Écriture JSON
│ └── registry.py # Détection automatique stores
├── scraping/ # Récupération pages
│ ├── __init__.py
│ ├── http_fetch.py # HTTP (User-Agent rotation)
│ └── pw_fetch.py # Playwright (anti-bot)
├── stores/ # Parsers par site
│ ├── __init__.py
│ ├── base.py # Classe abstraite BaseStore
│ ├── amazon/
│ │ ├── __init__.py
│ │ ├── store.py # AmazonStore
│ │ ├── selectors.yml # Sélecteurs CSS/XPath
│ │ └── fixtures/ # Fixtures HTML (vide)
│ └── cdiscount/
│ ├── __init__.py
│ ├── store.py # CdiscountStore
│ ├── selectors.yml # Sélecteurs CSS/XPath
│ └── fixtures/ # Fixtures HTML (vide)
└── cli/
├── __init__.py
└── main.py # CLI Typer (5 commandes)
Tests (structure)
tests/
├── __init__.py
├── core/ # Tests core (à implémenter)
├── scraping/ # Tests scraping (à implémenter)
└── stores/
├── amazon/ # Tests Amazon (à implémenter)
└── cdiscount/ # Tests Cdiscount (à implémenter)
Dossiers de sortie
scraped/ # HTML et screenshots de debug
✅ Fonctionnalités implémentées
Core
-
✅ ProductSnapshot : Modèle Pydantic canonique avec validation
- Métadonnées : source, url, fetched_at
- Données produit : title, price, currency, stock, images, specs
- Debug : method, status, errors, notes, durée, taille HTML
- Méthodes : to_dict(), to_json(), is_complete()
-
✅ Logging : Système de logs colorés
- Niveaux configurables (DEBUG, INFO, WARNING, ERROR)
- Timestamps ISO 8601
- Formatage avec couleurs ANSI
-
✅ IO : Lecture/écriture de fichiers
- Lecture YAML avec validation Pydantic
- Écriture JSON des snapshots
- Sauvegarde HTML et screenshots pour debug
-
✅ Registry : Détection automatique des stores
- Enregistrement dynamique
- Méthode match() avec scores
- Extensible (ajouter stores sans modifier le core)
Scraping
-
✅ HTTP Fetcher : Récupération HTTP rapide
- Rotation automatique User-Agent
- Gestion erreurs : 403, 404, 429, timeout
- Logging détaillé : durée, taille, status code
-
✅ Playwright Fetcher : Anti-bot robuste
- Mode headless/headful
- Screenshot optionnel
- Timeout configurable
- Fonction fallback automatique (HTTP → Playwright)
Stores
-
✅ BaseStore : Classe abstraite
- Méthodes : match(), canonicalize(), extract_reference(), parse()
- Chargement automatique sélecteurs depuis YAML
-
✅ AmazonStore : Support Amazon.fr et Amazon.com
- Détection avec score (0.9 pour .fr, 0.8 pour .com)
- Extraction ASIN depuis URL
- Canonisation vers /dp/{ASIN}
- Parsing complet avec BeautifulSoup
- Détection captcha/robot check
-
✅ CdiscountStore : Support Cdiscount.com
- Détection avec score 0.9
- Extraction SKU depuis URL (format /f-{ID}-{SKU}.html)
- Support schema.org (itemprop)
- Parsing avec fallbacks multiples
CLI (Typer)
-
✅ pricewatch run : Pipeline complet YAML → JSON
- Lecture config YAML
- Détection automatique store
- Stratégie fallback HTTP → Playwright
- Sauvegarde HTML/screenshots
- Écriture résultats JSON
-
✅ pricewatch detect : Test détection store
- Affiche store détecté, score, URL canonique, référence
-
✅ pricewatch fetch : Test récupération
- Mode HTTP ou Playwright
- Flag --headful pour mode visible
- Affiche durée, taille, status
-
✅ pricewatch parse : Test parsing HTML
- Parse un fichier HTML local
- Affiche tous les champs extraits
-
✅ pricewatch doctor : Vérification installation
- Table Rich avec statut de tous les composants
- Vérifie Python, dépendances, stores
🧪 Tests effectués
✅ Installation package (pip install -e .)
✅ Import modules (schema, registry, stores)
✅ Commande pricewatch doctor → OK
✅ Détection Amazon.fr → score=0.90, ASIN extrait
✅ Détection Cdiscount.com → score=0.90, SKU extrait
✅ HTTP fetch → 255ms, status=200
🎯 Décisions techniques justifiées
-
HTTP prioritaire sur Playwright
- Justification : ~1s vs ~10s, économie ressources
- Fallback automatique si échec (403, captcha)
-
Sélecteurs externalisés en YAML
- Justification : Maintenance sans toucher code Python
- Sites changent sélecteurs fréquemment
-
Pattern Registry
- Justification : Extensibilité (ajouter stores sans modifier core)
- Découplage entre détection et parsing
-
ProductSnapshot canonique
- Justification : Structure unifiée tous stores
- Facilite base de données future
-
Logging systématique
- Justification : Observabilité cruciale (anti-bots, timeouts)
- Debug facilité avec durées et tailles
-
Pas d'optimisation prématurée
- Justification : Code simple et lisible
- Optimiser selon besoins réels
📦 Dépendances installées
Production
- typer[all] 0.21.1 : Framework CLI
- pydantic 2.12.5 : Validation données
- requests 2.32.5 : HTTP simple
- playwright 1.57.0 : Scraping anti-bot
- beautifulsoup4 4.14.3 : Parsing HTML
- lxml 6.0.2 : Parser XML/HTML rapide
- pyyaml 6.0.3 : Configuration YAML
- rich 14.2.0 : Affichage CLI coloré
Dev (optionnel)
- pytest : Tests unitaires
- pytest-cov : Couverture de code
- black : Formatage code
- ruff : Linting
- mypy : Type checking
🚀 Instructions de démarrage
1. Activer l'environnement
source venv/bin/activate
2. Installer Playwright (si nécessaire)
playwright install chromium
3. Vérifier l'installation
pricewatch doctor
4. Tester une détection
pricewatch detect "https://www.amazon.fr/dp/B08N5WRWNW"
5. Éditer scrap_url.yaml
Remplacer l'URL exemple par une vraie URL produit.
6. Lancer le scraping
pricewatch run --yaml scrap_url.yaml --debug
7. Consulter les résultats
cat scraped_store.json | python -m json.tool
ls -lh scraped/
🔜 Prochaines phases (non implémentées)
Phase 2 : Base de données
- PostgreSQL + SQLAlchemy
- Migrations Alembic
- Historique des prix
Phase 3 : Worker et automation
- Redis + RQ ou Celery
- Scraping quotidien automatique
- Queue de tâches
Phase 4 : Web UI
- FastAPI backend
- Frontend responsive
- Dark theme Gruvbox
- Graphiques historiques
Phase 5 : Alertes
- Notifications baisse de prix
- Retour en stock
- Webhooks / Email
📝 Notes importantes
Limitations actuelles
- ❌ Pas de tests unitaires (structure prête)
- ❌ Pas de fixtures HTML (dossiers créés)
- ❌ Playwright non testé (nécessite
playwright install) - ❌ Parsing non testé sur vraies pages (sélecteurs à ajuster)
- ❌ Pas de base de données (CLI seulement)
Points d'attention
- ⚠️ Les sélecteurs Amazon/Cdiscount peuvent changer
- ⚠️ Respecter les robots.txt et conditions d'utilisation
- ⚠️ Anti-bot peut bloquer même avec Playwright
- ⚠️ Rate limiting à implémenter pour usage production
Recommandations
- Tester avec vraies URLs et ajuster sélecteurs si nécessaire
- Ajouter fixtures HTML pour tests automatisés
- Implémenter rate limiting (délai entre requêtes)
- Ajouter retry logic avec backoff exponentiel
- Monitorer taux de succès par store
✨ Conclusion
Phase 1 complétée avec succès !
Le projet PriceWatch dispose maintenant d'une base solide, modulaire et extensible pour le scraping de produits e-commerce. L'architecture permet d'ajouter facilement de nouveaux stores, et le CLI offre toutes les commandes nécessaires pour tester et débugger le système.
Prêt pour la Phase 2 : Base de données et historisation des prix.
Livré par : Claude Code (Sonnet 4.5) Date de livraison : 2026-01-13