Extraction de données et Web Scraping basés sur l'IA avec OpenClaw
Les scrapers Web traditionnels sont fragiles. Ils dépendent de sélecteurs CSS et de modèles XPath qui se brisent dès qu'un site repense sa mise en page. Ils ne peuvent pas s'adapter au contenu dynamique chargé par les frameworks JavaScript. Ils échouent silencieusement lorsqu’ils rencontrent des CAPTCHA, une limitation de débit ou des blocs IP. L'entretien d'un parc de scrapers nécessite une attention constante à mesure que les sites cibles changent, un coût qui dépasse souvent la valeur des données extraites.
Les agents d'extraction de données d'OpenClaw sont différents. Ils combinent l'automatisation du navigateur, la compréhension visuelle et l'analyse basée sur LLM pour extraire les données des sites Web sans recourir à des sélecteurs fragiles. Lorsqu'un site change de mise en page, l'agent s'adapte. Lorsqu'il rencontre un CAPTCHA, il s'intensifie plutôt que d'échouer silencieusement. Le résultat est un pipeline d’extraction de données qui est bien plus maintenable que les scrapers traditionnels.
Points clés à retenir
- Les agents d'extraction d'OpenClaw utilisent l'automatisation du navigateur (Playwright) pour le contenu rendu en JavaScript, éliminant ainsi l'écart entre ce que les utilisateurs voient et ce à quoi les scrapers peuvent accéder.
- L'analyse basée sur LLM extrait les données structurées du HTML non structuré sans sélecteurs CSS : l'agent comprend le contenu de manière sémantique et non positionnelle.
- Rotation de proxy intégrée, demande de randomisation d'empreintes digitales et limitation de débit, gestion des mesures anti-bot sans infrastructure supplémentaire.
- L'extraction basée sur le schéma produit une sortie typée et validée : plus besoin de traiter des données récupérées partielles ou mal formées en aval.
- L'agent d'extraction surveille les modifications du site et alerte lorsque la structure des données ou la disponibilité change de manière significative.
- Des garde-fous éthiques sont intégrés : conformité robots.txt, respect des limites de débit et points de contrôle de révision des conditions de service.
- Les données extraites sont nettoyées, normalisées et transmises automatiquement à votre entrepôt de données, à votre API ou à votre application en aval.
- ECOSIRE construit et gère des pipelines d'extraction de données personnalisés pour les applications d'intelligence de marché, de surveillance concurrentielle et de recherche.
Architecture : Comment OpenClaw extrait les données
La pile d'extraction de données comporte quatre couches :
Target URL(s)
↓
[ Browser Agent ] — navigation, rendering, interaction
↓
[ Parser Agent ] — LLM-based content extraction
↓
[ Validation Agent ] — schema validation, normalization
↓
[ Delivery Agent ] — destination write (warehouse, API, file)
L'agent de navigateur gère les requêtes HTTP et le rendu JavaScript. L'agent analyseur extrait le sens du rendu HTML. L'agent de validation assure la conformité du schéma et normalise les valeurs. L'agent de livraison écrit les données extraites vers la destination cible.
Agent de navigateur : rendu de ce que voient les utilisateurs
Les sites utilisant beaucoup de JavaScript (SPA, défilement infini, contenu modal) ne peuvent pas être récupérés avec de simples requêtes HTTP. L'agent de navigateur utilise Playwright pour restituer les pages exactement comme le ferait un navigateur, puis expose le DOM entièrement rendu à l'agent d'analyse.
export const RenderPage = defineSkill({
name: "render-page",
tools: ["browser", "proxy"],
async run({ input, tools }) {
const proxyConfig = await tools.proxy.getNextProxy({ country: input.targetCountry });
const page = await tools.browser.newPage({
proxy: proxyConfig,
userAgent: getRandomUserAgent(),
viewport: { width: 1440, height: 900 },
locale: "en-US",
timezoneId: "America/New_York",
});
await page.setExtraHTTPHeaders({
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
});
const response = await page.goto(input.url, { waitUntil: "networkidle", timeout: 30_000 });
if (response.status() === 429) {
throw new SkillError("RATE_LIMITED", "Target site returned 429. Backing off.", { retryAfterMs: 60_000 });
}
// Execute interaction steps if defined (click "Load More", handle cookie banners, etc.)
for (const step of input.interactionSteps ?? []) {
await executeInteractionStep(page, step);
}
const html = await page.content();
const screenshot = await page.screenshot({ type: "png" }); // For visual verification
await page.close();
return { html, screenshot, url: page.url(), statusCode: response.status() };
},
});
Demander la randomisation des empreintes digitales : l'agent de navigateur fait pivoter les agents utilisateurs, les tailles de fenêtre d'affichage et les en-têtes HTTP pour éviter le blocage basé sur les empreintes digitales. Les profils d'empreintes digitales sont tirés d'une bibliothèque organisée de signatures de navigateur réalistes.
Rotation des proxys : l'outil proxy gère un pool de proxys résidentiels et de centres de données organisés par zone géographique. Il sélectionne les proxys en fonction des exigences d'accès géographique du site cible et les alterne pour répartir les demandes sur les adresses IP.
Étapes d'interaction : de nombreux sites nécessitent une interaction avant que le contenu soit visible : cliquez sur "Accepter les cookies", faites défiler pour déclencher un chargement différé, cliquez sur les contrôles de pagination. Les étapes d'interaction sont définies de manière déclarative :
{
"interactionSteps": [
{ "type": "click", "selector": "[data-testid='cookie-accept']", "optional": true },
{ "type": "scroll", "direction": "down", "pixels": 2000 },
{ "type": "wait", "milliseconds": 2000 },
{ "type": "click", "text": "Load more results", "optional": true }
]
}
Agent Parser : Extraction sémantique sans sélecteurs
L'analyseur est l'endroit où l'avantage de l'IA d'OpenClaw est le plus visible. Au lieu de sélecteurs CSS fragiles, l'agent analyseur envoie le code HTML rendu et une définition de schéma à un LLM, qui extrait les champs demandés en utilisant la compréhension sémantique.
export const ExtractStructuredData = defineSkill({
name: "extract-structured-data",
tools: ["llm"],
async run({ input, tools }) {
// Clean HTML for LLM consumption (strip scripts, styles, non-content)
const cleanedHtml = cleanHtmlForExtraction(input.html, {
stripTags: ["script", "style", "noscript", "iframe"],
preserveAttributes: ["href", "src", "data-price", "data-sku"],
maxLength: 50_000, // LLM context limit
});
const extractedData = await tools.llm.extract({
content: cleanedHtml,
schema: input.extractionSchema,
instructions: `Extract the requested fields from the HTML. For prices, include the numeric value only (no currency symbols). For dates, use ISO 8601 format. If a field is not present on the page, return null for that field.`,
});
return { data: extractedData, sourceUrl: input.url, extractedAt: new Date().toISOString() };
},
});
Définition du schéma d'extraction : les schémas sont définis au format JSON Schema, donnant au LLM des conseils de saisie précis :
{
"type": "object",
"properties": {
"productName": { "type": "string", "description": "Full product name including model/variant" },
"price": { "type": "number", "description": "Current selling price, numeric only" },
"originalPrice": { "type": ["number", "null"], "description": "Original price before discount, or null if not on sale" },
"availability": { "type": "string", "enum": ["in_stock", "out_of_stock", "limited", "preorder"] },
"rating": { "type": ["number", "null"], "description": "Average rating out of 5, or null if no ratings" },
"reviewCount": { "type": ["integer", "null"] },
"sku": { "type": ["string", "null"] }
},
"required": ["productName", "price", "availability"]
}
Le LLM remplit chaque champ en fonction de sa compréhension sémantique du contenu de la page. Les champs obligatoires absents déclenchent un échec d’extraction plutôt qu’une valeur nulle silencieuse.
Gestion de l'exploration : navigation sur des sites multipages
L'extraction de données la plus utile nécessite de naviguer sur plusieurs pages : listes de produits paginées, hiérarchies de catégories, articles de plusieurs pages. Le Crawl Manager coordonne les agents Browser et Parser sur un site.
export const CrawlProductListing = defineSkill({
name: "crawl-product-listing",
tools: ["browser", "queue", "storage"],
async run({ input, tools }) {
let pageUrl: string | null = input.startUrl;
const allProducts = [];
let pageNumber = 1;
while (pageUrl && pageNumber <= input.maxPages) {
const rendered = await tools.browser.render(pageUrl, { interactionSteps: input.interactionSteps });
const products = await extractProductsFromPage(rendered.html, input.extractionSchema);
allProducts.push(...products);
// Find the "Next" page URL
pageUrl = extractNextPageUrl(rendered.html, input.paginationPattern);
pageNumber++;
// Respect crawl rate — be a polite scraper
await sleep(input.delayBetweenPagesMs ?? 2000);
}
await tools.storage.put(`crawls/${Date.now()}-products.json`, JSON.stringify(allProducts));
return { productCount: allProducts.length, pagesProcessed: pageNumber - 1 };
},
});
Le gestionnaire de crawl respecte robots.txt par défaut. Avant de démarrer une analyse, il récupère et analyse le fichier robots.txt du site cible et vérifie que les chemins cibles sont autorisés pour l'agent utilisateur configuré. Les crawls tentant d'accéder à des chemins interdits sont bloqués et une alerte est envoyée à l'opérateur.
Gestion des mesures anti-bot
Les systèmes anti-bots modernes (Cloudflare, Akamai Bot Manager, PerimeterX) utilisent des signaux comportementaux pour distinguer les humains des robots. L'agent d'extraction utilise plusieurs techniques pour apparaître comme du trafic de navigateur légitime :
Simulation des mouvements de la souris : les sessions de navigateur réelles ont des mouvements de souris non linéaires. L'agent simule des trajectoires de curseur réalistes avec des courbes de vitesse naturelles avant de cliquer sur les cibles.
Variation temporelle : les requêtes sont retardées par des intervalles aléatoires tirés d'une distribution calibrée en fonction du comportement de navigation humaine, et non par des intervalles uniformes ou déterministes.
Gestion des cookies : Les cookies définis par les systèmes anti-bot sont conservés et envoyés lors des requêtes ultérieures, tout comme le ferait un navigateur.
Réalisation du défi JavaScript : pour les sites utilisant des défis JavaScript (vérification des capacités de l'API du navigateur, exécution de puzzles de calcul), l'environnement de navigateur complet réussit automatiquement ces vérifications.
Pour les sites dotés de portes CAPTCHA, l'agent dispose de deux chemins :
- Intégration de services : acheminez les CAPTCHA vers un service de résolution de CAPTCHA assisté par l'homme (2captcha, Anti-Captcha) lorsqu'une résolution non interactive est acceptable.
- Escalade humaine : suspendez la tâche d'extraction, alertez un opérateur humain pour qu'il navigue manuellement au-delà du CAPTCHA et reprenez à partir de la page suivante.
Validation du schéma et normalisation des données
Les données brutes extraites sont bruitées. Les prix sont disponibles sous différents formats (1 299,99 $, 1 299,99, 1 299,99 pour les formats européens). Les dates apparaissent dans tous les formats imaginables. Les noms de produits comportent des majuscules et des artefacts d'encodage incohérents. L'agent de validation normalise toutes les valeurs avant qu'elles n'atteignent la couche de livraison.
export const NormalizeExtractedData = defineSkill({
name: "normalize-extracted-data",
async run({ input }) {
const normalized = input.data.map((record) => ({
...record,
price: parseFloat(String(record.price).replace(/[^0-9.]/g, "")),
originalPrice: record.originalPrice
? parseFloat(String(record.originalPrice).replace(/[^0-9.]/g, ""))
: null,
productName: record.productName.trim().replace(/\s+/g, " "),
extractedAt: new Date(record.extractedAt).toISOString(),
availability: normalizeAvailability(record.availability),
}));
// Validate against schema
const validation = validateAgainstSchema(normalized, input.outputSchema);
const valid = normalized.filter((_, i) => validation[i].valid);
const invalid = normalized.filter((_, i) => !validation[i].valid);
return { valid, invalid, validCount: valid.length, invalidCount: invalid.length };
},
});
Les enregistrements invalides (champs obligatoires manquants, valeurs qui ne peuvent pas être normalisées) sont écrits dans un magasin d'exceptions distinct pour examen plutôt que supprimés silencieusement.
Livraison : obtenir les données là où elles doivent aller
L'agent de livraison écrit des données normalisées vers la destination configurée :
Data Warehouse : insertion par lots dans BigQuery, Snowflake ou Redshift avec mappage de colonnes correspondant au schéma. Partitionné par date d'extraction pour une interrogation efficace.
API REST : POST sur un point de terminaison d'API interne pour une consommation en temps réel. Prend en charge les nouvelles tentatives sur 5xx et inclut une interruption exponentielle.
S3 / Cloud Storage : écrivez au format Parquet ou JSON pour le traitement en aval par les pipelines d'analyse.
Base de données : insertion vers PostgreSQL, MySQL ou MongoDB avec résolution de conflit configurable (mise à jour en cas de correspondance, saut en cas de correspondance, erreur en cas de correspondance).
Détection et surveillance des changements
Les sites changent de structure. Un concurrent repense ses pages produits. Un fournisseur met à jour son format de tarification. Le pipeline d'extraction doit détecter ces changements et alerter avant que la qualité des données ne se dégrade.
L'agent de surveillance s'exécute quotidiennement et compare le résultat de l'extraction actuelle à une référence statistique :
- Taux de couverture des champs (quel pourcentage d'enregistrements ont des valeurs non nulles pour chaque champ)
- Modifications de la répartition de la valeur (fourchettes de prix, taux de disponibilité)
- Taux de réussite de l'extraction (quel pourcentage de tentatives d'exploration produit des enregistrements valides)
Les écarts importants déclenchent une alerte avec un échantillon de la sortie modifiée pour examen humain.
Questions fréquemment posées
Le web scraping est-il légal ?
La légalité du web scraping dépend de la juridiction, des données récupérées et des conditions de service du site cible. Les données publiques (prix des produits, coordonnées publiées, articles de presse publiés) sont généralement autorisées à être récupérées dans la plupart des juridictions, sous réserve des conditions d'utilisation du site. Le fait de contourner l’authentification, l’accès aux données personnelles ou le contournement des mesures techniques de protection soulève des préoccupations juridiques et éthiques. ECOSIRE recommande d'obtenir un examen juridique pour votre cas d'utilisation spécifique et vos sites cibles avant de déployer des pipelines d'extraction de production. OpenClaw inclut la conformité robots.txt et la limitation de débit par défaut comme garde-fous éthiques de base.
Comment le système gère-t-il les sites qui nécessitent une connexion pour accéder aux données ?
Pour les sites sur lesquels votre organisation dispose d'informations d'identification légitimes (votre propre portail de fournisseurs, les services de surveillance des prix des concurrents auxquels vous êtes abonné, les sites partenaires), l'agent peut se connecter à l'aide des informations d'identification configurées stockées dans le gestionnaire de secrets. L'interaction de connexion est gérée par l'agent de navigateur à l'aide du système d'étapes d'interaction. Les cookies de session sont conservés et actualisés automatiquement. Pour les sites nécessitant une authentification multifacteur, l'agent prend en charge la MFA basée sur TOTP à l'aide d'un secret TOTP configurable.
Quelle est la garantie de fraîcheur des données pour les données récupérées ?
La fraîcheur des données dépend de votre calendrier d'exploration. OpenClaw prend en charge les planifications d'analyse du temps réel (analyse continue avec limitation de débit) jusqu'au quotidien, hebdomadaire ou à la demande. Pour les données de tarification compétitives, les analyses horaires ou biquotidiennes sont courantes. Pour les données d’études de marché qui évoluent lentement, une fréquence quotidienne ou hebdomadaire suffit. L'agent d'extraction horodatage chaque enregistrement avec le temps d'extraction afin que les consommateurs puissent évaluer la fraîcheur.
Le système peut-il gérer les API paginées ainsi que les pages Web ?
Oui. L'agent de navigateur gère les pages Web ; un agent d'extraction d'API gère les API REST et GraphQL paginées. Pour les API qui renvoient du JSON structuré, l'agent Parser est remplacé par une étape de mappage de schéma plus simple qui mappe les champs de réponse de l'API au schéma de sortie. Le Crawl Manager gère la pagination via les en-têtes de lien, la pagination basée sur le curseur, la pagination à limite de décalage et les modèles de pagination basés sur des jetons.
Comment gérer le contenu dynamique qui se charge de manière asynchrone après le rendu initial de la page ?
L'agent de navigateur prend en charge l'attente d'inactivité du réseau : il attend qu'aucune nouvelle requête réseau n'ait été effectuée pendant 500 ms avant d'extraire le contenu de la page. Pour les appels d'API spécifiques qui chargent les données critiques, vous pouvez configurer l'agent pour intercepter les réponses réseau et extraire les données directement de la charge utile de l'API plutôt que du HTML rendu, ce qui est plus rapide et plus fiable que l'analyse HTML.
Prochaines étapes
Les données sont un atout compétitif, mais seulement si vous pouvez y accéder de manière fiable et à grande échelle. Les agents d'extraction de données d'OpenClaw offrent la fiabilité, l'adaptabilité et l'analyse basée sur l'IA que les scrapers traditionnels fragiles ne peuvent égaler.
Le service OpenClaw Custom Skills d'ECOSIRE comprend la conception et la mise en œuvre de pipelines d'extraction de données pour l'intelligence du marché, la surveillance de la concurrence, le suivi des prix et les cas d'utilisation de la collecte de données de recherche. Notre équipe conçoit des pipelines d’extraction robustes, maintenables et éthiquement solides.
Contactez ECOSIRE pour discuter de vos besoins en matière d'extraction de données et recevoir une proposition de mise en œuvre personnalisée.
Rédigé par
ECOSIRE Research and Development Team
Création de produits numériques de niveau entreprise chez ECOSIRE. Partage d'analyses sur les intégrations Odoo, l'automatisation e-commerce et les solutions d'entreprise propulsées par l'IA.
Articles connexes
AI-Powered Accounting Automation: What Works in 2026
Discover which AI accounting automation tools deliver real ROI in 2026, from bank reconciliation to predictive cash flow, with implementation strategies.
Payroll Processing: Setup, Compliance, and Automation
Complete payroll processing guide covering employee classification, federal and state withholding, payroll taxes, garnishments, automation platforms, and year-end W-2 compliance.
AI Agents for Business Automation: The 2026 Landscape
Explore how AI agents are transforming business automation in 2026, from multi-agent orchestration to practical deployment strategies for enterprise teams.