4.5 KiB
Executable File
4.5 KiB
Executable File
Analyse comparative: Amazon vs Cdiscount
URL exemple
- Amazon:
https://www.amazon.fr/dp/B0D4DX8PH3 - Cdiscount:
https://www.cdiscount.com/informatique/ordinateurs-pc-portables/pc-portable-gamer-asus-tuf-gaming-a16-sans-windo/f-10709-tuf608umrv004.html
Différences majeures
1. Protection anti-bot
Amazon:
- HTTP simple fonctionne généralement
- Quelques captchas occasionnels
Cdiscount:
- ✗ HTTP simple retourne une page de protection JavaScript (Cloudflare/Baleen)
- ✓ Playwright obligatoire pour contourner la protection
- Timeout: ~2-3 secondes pour charger la page
2. Structure HTML
Amazon:
- IDs statiques:
#productTitle,#landingImage,#availability - Classes avec préfixes:
.a-price-whole,.a-price-fraction - Prix divisé en 3 parties (entier + fraction + symbole)
- Beaucoup de métadonnées dans le HTML
Cdiscount:
- ✗ Pas de JSON-LD schema.org (contrairement à ce qu'on pourrait attendre)
- Classes CSS générées dynamiquement:
sc-bdvvtL,sc-110rxkl-0, etc. - data-e2e attributes pour les tests E2E:
data-e2e="title" - Prix affiché directement: "1499,99 €"
3. Sélecteurs identifiés
Titre
h1[data-e2e="title"]
- Classes:
sc-bdvvtL sc-1hgfn9o-0 hFUtWx kQxXmq(peuvent changer) - ✓ Utiliser
data-e2e="title"plus stable
Prix
Classe instable:
div.SecondaryPrice-pricecontient "1499,99 €"- Classes:
sc-83lijy-0 kwssIa SecondaryPrice-price
Regex sur le texte:
- Pattern:
(\d+[,\.]\d+)\s*€ - Plus robuste que les classes
Images
img[alt*="PC Portable"]
- Attribut
altcontient le titre du produit - URL format:
https://www.cdiscount.com/pdt2/0/0/4/X/700x700/tuf608umrv004/rw/... - Plusieurs résolutions disponibles (URL path change)
SKU / Référence
Depuis l'URL:
https://www.cdiscount.com/.../f-10709-tuf608umrv004.html
^^^^^^^^^^^^^^^
category-SKU
- Pattern regex:
/f-(\d+)-([a-z0-9]+)\.html - SKU = deuxième groupe (ex:
tuf608umrv004)
Catégorie
- ✗ Pas de breadcrumb visible dans le HTML analysé
- Peut être dans l'URL:
/informatique/ordinateurs-pc-portables/... - À extraire depuis le path URL
Stock / Disponibilité
- ✗ Pas d'élément clair trouvé avec "availability" ou "stock"
- Peut nécessiter analyse plus poussée ou être dans un script JS
4. Stratégie d'extraction
Ordre de priorité:
- Titre:
h1[data-e2e="title"]✓ Stable - Prix:
- Regex sur le texte:
(\d+[,\.]\d+)\s*€ - Fallback: chercher dans
divavec "price" dans la classe
- Regex sur le texte:
- Devise: Toujours EUR pour Cdiscount France
- SKU: Extraction depuis URL avec regex
- Images:
img[alt]où alt contient le titre - Catégorie: Extraction depuis l'URL path
- Stock: À définir (default: unknown)
5. Recommandations
Pour le parser Cdiscount:
- ✓ Playwright obligatoire - HTTP ne fonctionne pas
- ✓ Utiliser les
data-e2eattributes quand disponibles (plus stables) - ✓ Parsing prix par regex plutôt que sélecteurs CSS (classes instables)
- ✓ SKU depuis URL (plus fiable que le HTML)
- ⚠ Prévoir fallbacks multiples pour le prix (plusieurs formats possibles)
Sélecteurs à mettre à jour dans selectors.yml:
title:
css: 'h1[data-e2e="title"]'
fallback_css: 'h1'
price:
# Prix extrait par regex depuis le texte
regex: '(\d+[,\.]\d+)\s*€'
# Fallback: classes CSS (instables)
css: 'div[class*="SecondaryPrice-price"]'
currency:
static: 'EUR'
images:
css: 'img[alt]'
# Filtrer celles qui ont le titre dans alt
reference:
# Extraction depuis URL
url_regex: '/f-\d+-([a-z0-9]+)\.html'
category:
# Extraction depuis URL path
url_regex: '^/([^/]+)/([^/]+)/'
stock:
# À définir - default: unknown
css: 'div[class*="availability"]'
Conclusion
Cdiscount est significativement plus difficile à scraper qu'Amazon:
| Critère | Amazon | Cdiscount |
|---|---|---|
| Anti-bot | Faible | ✗ Fort (Playwright requis) |
| Sélecteurs | ✓ Stables (IDs) | ✗ Instables (classes générées) |
| Structured data | ✓ Oui (JSON) | ✗ Non |
| Vitesse | ✓ Rapide (HTTP) | Lent (Playwright, ~2s) |
| Fiabilité | ✓✓ Haute | ⚠ Moyenne (nécessite fallbacks) |
Stratégie recommandée:
- Toujours utiliser Playwright pour Cdiscount
- Implémenter plusieurs fallbacks pour chaque champ
- Parser le prix par regex pour robustesse
- Extraire SKU et catégorie depuis l'URL plutôt que le HTML