Outils de scraping et fallback extraction

But

Documenter la pile de scraping/extraction qui alimente la recherche agentique Tastiie, avec une logique simple :

  • extraction principale quand le backend web répond proprement
  • fallback local plus résilient quand une page bloque, time out ou revient vide

Stack retenue

Couche primaire

La couche primaire reste multi-backend selon la configuration disponible :

  • Firecrawl
  • Tavily
  • Exa
  • Parallel

Cette couche sert à :

  • chercher des sources
  • extraire rapidement du contenu
  • garder une logique standardisée côté agentic search

Couche de renfort

Scrapling est maintenant intégré comme brique de renfort pour l’extraction.

Rôle de Scrapling ici :

  • récupérer localement le contenu d’une page quand la couche primaire ne suffit pas
  • améliorer la résilience du système de scraping
  • éviter qu’une recherche utile s’effondre uniquement sur un problème d’extraction ponctuel

Quand Scrapling prend le relais

Scrapling est utilisé dans les cas suivants :

  1. backend d’extraction non disponible sur certains modes non Firecrawl
  2. timeout de scraping sur Firecrawl
  3. extraction Firecrawl vide ou quasi vide
  4. erreur d’extraction Firecrawl sur une URL donnée

Escalade sélective V2

La V2 ajoute une logique d’escalade par type de domaine au lieu d’un fallback uniforme.

Niveau 1 — standard

Par défaut, un domaine normal reste sur une récupération Scrapling standard.

Objectif :

  • rester léger
  • éviter de déclencher un mode navigateur plus lourd sans raison

Niveau 2 — stealth

Pour certains domaines réputés plus durs, la stratégie passe directement en mode stealth.

Objectif :

  • améliorer le taux de récupération
  • mieux passer les protections et comportements anti-bot légers

Niveau 3 — dynamique

Pour certains cas plus sensibles, la chaîne peut escalader jusqu’au mode dynamique.

Objectif :

  • gérer des pages plus fortement dépendantes du rendu navigateur
  • réserver ce coût aux cas où il est justifié

Principe de décision

La règle retenue est volontairement prudente :

  • domaine standard standard
  • domaine difficile stealth
  • domaine très sensible / cas prévu pour rendu plus lourd stealth puis dynamique si nécessaire

Autrement dit :

  • pas de navigateur lourd partout
  • escalade seulement quand le domaine le justifie

Ce que ça change

Avant :

  • une URL pouvait échouer complètement si le backend principal tombait en défaut
  • le fallback local était unique

Maintenant :

  • l’agent tente une récupération locale de secours
  • il peut choisir un niveau de scraping plus adapté au domaine
  • la chaîne search extract synthèse devient moins fragile
  • on contrôle mieux le compromis robustesse / coût

Niveau d’implémentation

L’intégration est faite dans la couche d’extraction web commune.

En pratique :

  • on ne remplace pas toute la stack existante
  • on ajoute un filet de sécurité sur les cas où l’extraction primaire échoue
  • on garde les garde-fous existants : sécurité URL, website policy, traitement de sortie, puis synthèse

Arbitrage retenu

Le choix n’est pas de basculer tout le scraping sur Scrapling par défaut.

Le choix retenu est plus propre opérationnellement :

  • garder les backends standards comme voie principale
  • utiliser Scrapling comme accélérateur de robustesse
  • réserver un passage plus agressif/stealth à un besoin confirmé, pas en standard partout

Limites actuelles

  • le fallback Scrapling améliore surtout la récupération de contenu, pas encore toute la logique de deep extraction ciblée
  • on n’a pas encore branché par défaut les modes les plus lourds de navigation dynamique/stealth dans ce flux
  • certaines pages très JS ou très protégées pourront encore demander une approche navigateur dédiée

Validation

Validation ciblée réalisée sur :

  • fallback quand un backend est indisponible
  • fallback après erreur Firecrawl
  • non-régression sur website policy
  • non-régression sur Tavily
  • non-régression sur agentic search

Suite logique

Prochaine amélioration utile si besoin :

  1. ajouter une escalade sélective vers un mode Scrapling plus stealth sur domaines vraiment difficiles
  2. distinguer plus finement extraction texte, extraction HTML et extraction orientée blocs utiles
  3. relier cette couche à une heuristique de qualité de source dans agentic search