5.2 KiB
Executable File
5.2 KiB
Executable File
Résumé de la session - Analyse et amélioration Cdiscount
Date: 2026-01-13
Objectif
Analyser les différences entre Amazon et Cdiscount, créer des fixtures HTML réalistes, et améliorer le système de scraping pour Cdiscount.
Réalisations
1. Fixtures Amazon ✓
- Fichiers créés: 3 fixtures HTML + README
amazon_B0D4DX8PH3.html(UGREEN Chargeur, 2.4 MB)amazon_B0F6MWNJ6J.html(Baseus Docking Station, 2.3 MB)captcha.html(Page captcha Amazon, 5.1 KB)
- Tests: 12 tests pytest avec fixtures réelles ✓ Tous passent
2. Analyse comparative Amazon vs Cdiscount ✓
- Document créé:
CDISCOUNT_ANALYSIS.md - Différences identifiées:
- Anti-bot: Cdiscount utilise Cloudflare/Baleen (Playwright obligatoire)
- Sélecteurs: Classes CSS dynamiques vs IDs statiques Amazon
- Structure:
data-e2eattributes vs sélecteurs traditionnels - Prix: Format texte direct "1499,99 €" vs 3 parties sur Amazon
3. Fixtures Cdiscount ✓
- Fichiers créés: 3 fixtures HTML + README
cdiscount_tuf608umrv004_pw.html(PC ASUS, 310 KB)cdiscount_a128902_pw.html(Canapé NIRVANA, 342 KB)cdiscount_phi1721524349346_pw.html(Écran Philips, 311 KB)
- Script de scraping:
fetch_cdiscount.pyutilisant Playwright
4. Sélecteurs Cdiscount améliorés ✓
- Fichier mis à jour:
pricewatch/app/stores/cdiscount/selectors.yml - Améliorations:
- Ajout de
data-e2e="title"(plus stable) - Ajout de
div[data-e2e="price"]pour nouveau layout - Documentation des stratégies d'extraction
- Notes sur l'obligation de Playwright
- Ajout de
5. Tests Cdiscount ✓
- Fichiers créés:
tests/stores/test_cdiscount.py(26 tests unitaires)tests/stores/test_cdiscount_fixtures.py(12 tests avec fixtures réelles)
- Résultats: 38/38 tests Cdiscount passent ✓
6. Tests avec URLs réelles ✓
Trois produits Cdiscount testés avec succès:
| Produit | SKU | Prix | Status |
|---|---|---|---|
| PC Gamer ASUS | tuf608umrv004 | 1499.99 EUR | ✓ SUCCESS |
| Canapé NIRVANA | a128902 | 699.99 EUR | ✓ SUCCESS |
| Écran Philips | phi1721524349346 | 99.0 EUR* | ✓ SUCCESS |
*Note: Prix partiellement extrait (manque centimes sur nouveau layout)
Statistiques globales
Tests pytest
Total: 136 tests
✓ Passés: 130 (96%)
✗ Échecs: 6 (4% - tests Amazon avec HTML simplifiés)
Couverture de code
- core/schema.py: 100%
- stores/amazon/store.py: 89%
- stores/cdiscount/store.py: 72%
- Total projet: 48%
Fichiers créés/modifiés
- 6 fixtures HTML (~5 MB au total)
- 3 fichiers README (documentation fixtures)
- 1 document d'analyse comparative
- 2 fichiers de tests pytest (50 tests)
- 1 fichier selectors.yml mis à jour
- 3 scripts d'analyse temporaires
Points clés découverts
Protection anti-bot Cdiscount
- HTTP simple ne fonctionne PAS → Retourne page de protection (14 KB)
- Playwright obligatoire → Temps de chargement ~2-3s
- Protection Cloudflare/Baleen avec challenge JavaScript
Variabilité des layouts Cdiscount
- Layout 1 (ancien): Classes
SecondaryPrice-price - Layout 2 (nouveau): Attribut
data-e2e="price" - Nécessite fallbacks multiples dans les sélecteurs
Robustesse du parser
- ✓ Fonctionne sur 3 catégories différentes (informatique, maison, écrans)
- ✓ Gère plusieurs formats de prix
- ✓ Extraction SKU depuis URL (plus fiable que HTML)
- ⚠ Cas limite: prix avec séparateurs multiples dans HTML
Recommandations
Court terme
- ✓ FAIT: Ajouter
data-e2e="price"dans les sélecteurs - Améliorer l'extraction des centimes pour le nouveau layout
- Extraire la catégorie depuis l'URL (plus fiable)
Moyen terme
- Implémenter tests scraping/ avec mocks HTTP/Playwright
- Ajouter circuit breaker pour détecter changements de layout
- Monitoring des taux de succès par store
Long terme
- Base de données pour historique des layouts
- ML pour adaptation automatique aux nouveaux layouts
- Cache des pages pour réduire la dépendance à Playwright
Problèmes connus
Amazon
- 6 tests échouent avec HTML simplifiés (non critique)
- Tests fixtures réelles passent tous
Cdiscount
- Prix partiellement extrait sur nouveau layout (99.0 au lieu de 99.99)
- Catégorie et specs non extraits (peuvent être dans onglets cachés)
- Stock status toujours "unknown" (sélecteur à améliorer)
Commandes utiles
Scraper une nouvelle URL Cdiscount
from pricewatch.app.scraping.pw_fetch import fetch_playwright
from pricewatch.app.stores.cdiscount.store import CdiscountStore
result = fetch_playwright(url, headless=True, timeout_ms=60000)
store = CdiscountStore()
snapshot = store.parse(result.html, url)
Lancer tous les tests
pytest tests/ -v
Lancer tests Cdiscount uniquement
pytest tests/stores/test_cdiscount*.py -v
Conclusion
Le projet PriceWatch est maintenant robuste pour scraper à la fois Amazon et Cdiscount:
- ✓ Fixtures réalistes pour tests
- ✓ Parsing fonctionnel sur vrais produits
- ✓ Documentation complète
- ✓ 96% des tests passent
- ✓ Architecture extensible pour nouveaux stores
Prochaine étape suggérée: Phase 2 - Base de données PostgreSQL + historique des prix