# Procédure de scraping Amazon.fr ## Objectif - Extraire les champs requis (prix, stock, note, badges, image) sans casser le pipeline si un champ manque. - Produire un snapshot propre + artefacts de debug si blocage. ## Pré-requis - Playwright installé (Chromium). - Config lue depuis `backend/config_backend.json`. - Lancement via `scrape_product` ou `scrape_all`. ## Étapes de scraping 1. **Initialiser le navigateur** - Chromium, locale `fr-FR`, timezone `Europe/Paris`, viewport réaliste. - `user-agent` défini dans la config. 2. **Charger la page produit** - Délai aléatoire 1–3s entre requêtes. - Timeout contrôlé. 3. **Détecter blocage/captcha** - Si captcha / robot-check : - Marquer `scrape_status = blocked`. - Sauvegarder `screenshot` + `page.content()` dans `backend/data/screenshots`. - Log détaillé + retour sans crash. 4. **Extraire les champs** - Priorité aux IDs stables (ex: `#productTitle`, `#acrCustomerReviewText`, `#availability`). - Prix : gérer variantes (prix fractionné, promo). - Champs optionnels : si absent → `null` + log "missing field". 5. **Normaliser les valeurs** - Prix : `"249,99 €"` → `249.99`. - Notes : `"4,7 sur 5"` → `4.7`. - Stock : `in_stock` booléen + texte brut. 6. **Sauvegarder le snapshot** - Insérer un enregistrement `product_snapshots`. - Écrire un JSON raw dans `backend/data/raw/YYYY-MM/...`. ## Logs & erreurs - Chaque scrap doit tracer : start, fields manquants, status, fin. - Échec contrôlé si un champ est absent (jamais de crash global). ## Champs obligatoires - `url`, `asin`, `title`, `image_main_url`, `price_current`, `stock_status`, `rating_value`, `rating_count`. ## Champs optionnels - `price_list`, `discount_percent`, `lowest_30d_price`, `amazon_choice`, `limited_time_deal`, `prime_eligible`, `amazon_exclusive`. ## Notes - Pas de calcul inventé (pas de réduction sans source). - Stratégie captcha par défaut : abandon + log + retry plus tard.