This commit is contained in:
2026-01-18 12:23:01 +01:00
parent ef3d0ed970
commit bb1263edb8
86 changed files with 90289 additions and 0 deletions

53
docs/scrap.md Normal file
View File

@@ -0,0 +1,53 @@
# 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 13s 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.