Files
scrap/CDISCOUNT_ANALYSIS.md
2026-01-13 19:49:04 +01:00

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-price contient "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 alt contient 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é:

  1. Titre: h1[data-e2e="title"] ✓ Stable
  2. Prix:
    • Regex sur le texte: (\d+[,\.]\d+)\s*€
    • Fallback: chercher dans div avec "price" dans la classe
  3. Devise: Toujours EUR pour Cdiscount France
  4. SKU: Extraction depuis URL avec regex
  5. Images: img[alt] où alt contient le titre
  6. Catégorie: Extraction depuis l'URL path
  7. Stock: À définir (default: unknown)

5. Recommandations

Pour le parser Cdiscount:

  1. Playwright obligatoire - HTTP ne fonctionne pas
  2. ✓ Utiliser les data-e2e attributes quand disponibles (plus stables)
  3. ✓ Parsing prix par regex plutôt que sélecteurs CSS (classes instables)
  4. ✓ SKU depuis URL (plus fiable que le HTML)
  5. ⚠ 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