54 lines
2.0 KiB
Markdown
54 lines
2.0 KiB
Markdown
# 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.
|