Scraping avec AutomationSequence

Le scraping web avec des scripts Python ad hoc pose des problèmes de maintenabilité : logique dispersée, pas de reprise sur erreur, pas de traçabilité. AutomationSequence V8 structure le scraping comme une séquence JSON : chaque étape est déclarée, logguée dans le journal HMAC et reprise automatiquement en cas d'interruption.

Un script de scraping non structuré en production, c'est une boîte noire. Une séquence AutomationSequence V8, c'est un pipeline auditable avec reprise sur erreur, déduplication et stockage structuré.

Action playwright_goto

L'action playwright_browse pilote Chromium headless via Playwright :

[
  {
    "type": "playwright_browse",
    "url": "https://exemple.fr/catalogue",
    "wait_for": "networkidle",
    "timeout_ms": 15000,
    "viewport": {"width": 1280, "height": 800},
    "user_agent": "auto",
    "output_var": "page"
  },
  {
    "type": "playwright_extract",
    "page_var": "{{page}}",
    "selector": ".product-card",
    "fields": {
      "title":  ".product-title",
      "price":  ".price-value",
      "ref":    "[data-ref]",
      "image":  "img::attr(src)"
    },
    "output_var": "products"
  }
]

Sélecteurs CSS et XPath

AutomationSequence V8 supporte CSS, XPath et les sélecteurs Playwright natifs :

# CSS standard
".product-card .title"

# Attribut data-*
"[data-product-id]"

# XPath
"//div[@class='product']//span[@class='price']"

# Playwright text selector
"text=Ajouter au panier"

# Nth element
".result-item:nth-child(3)"

Pagination automatique

{
  "type": "playwright_paginate",
  "page_var": "{{page}}",
  "next_selector": ".pagination .next:not(.disabled)",
  "max_pages": 50,
  "extract_per_page": {
    "selector": ".product-card",
    "fields": {"title": ".title", "price": ".price"}
  },
  "accumulate_var": "all_products",
  "delay_between_pages_ms": 1200
}
// Scrape toutes les pages automatiquement jusqu'à
// l'absence du bouton "Suivant" ou max_pages atteint

Gestion anti-bot

Les sites protégés contre le scraping nécessitent des précautions :

{
  "type": "playwright_browse",
  "url": "https://exemple.fr",
  "stealth": true,           // playwright-stealth plugin
  "user_agent": "rotate",     // rotation UA aléatoire
  "proxy": "{{proxy_url}}",    // proxy rotatif optionnel
  "human_delays": {
    "min_ms": 800,
    "max_ms": 3500
  },
  "on_captcha": "pause_and_notify" // toast + SMTP si CAPTCHA détecté
}

Déduplication

{
  "type": "deduplicate",
  "data_var": "all_products",
  "key": "ref",              // dédupliquer sur le champ "ref"
  "strategy": "keep_latest", // garder le plus récent
  "output_var": "unique_products",
  "stats_var": "dedup_stats"
}
// {{dedup_stats}} = {"total": 450, "unique": 312, "removed": 138}

Stockage structuré

[
  // Sauvegarder en CSV
  {"type": "file_write_csv", "data": "{{unique_products}}",
   "path": "exports/catalogue_{{date_today}}.csv"},

  // Insérer en base Oracle
  {"type": "oracle_batch_insert",
   "table": "CATALOGUE_WEB",
   "data": "{{unique_products}}",
   "upsert_key": "ref"},

  // Rapport de scraping par email
  {"type": "smtp_send",
   "subject": "Scraping {{date_today}} : {{unique_products|length}} produits",
   "attachments": ["exports/catalogue_{{date_today}}.csv"]}
]

Conclusion

Le scraping structuré via AutomationSequence V8 apporte trois avantages clés sur un script Python classique : la reprise sur erreur (checkpoint entre pages), la déduplication déclarative et la traçabilité complète dans le journal HMAC. La pagination automatique et la gestion anti-bot native couvrent 90% des cas d'usage de scraping professionnel sans code Python supplémentaire.

⚙️
PRODUIT LIÉ
AutomationSequence V8.0
← Article précédent Article suivant →