n8n+DiffHook

Scraping web n8n — basé sur le diff, webhook-first

Pointez DiffHook vers les pages à scraper, décrivez ce qu'il faut extraire avec un sélecteur CSS, et n8n reçoit le diff HTML à chaque mouvement — déjà mis en cache, déjà dédupliqué, déjà signé.

Le scraper n8n habituel, c'est un déclencheur Schedule + HTTP Request + HTML Extract + un peu de code dans un node Code pour comparer à un datastore. Ça marche, mais ça scrape à chaque tick même si rien n'a bougé, et la logique « est-ce différent de la dernière fois ? » finit par réinventer une petite base de données à l'intérieur de n8n. DiffHook déplace le fetch, le parsing HTML et le diff hors de n8n : le workflow ne s'exécute qu'une fois par vrai changement — rien de plus.

n8n

Le hub n8n + DiffHook complet

Toutes les recettes, templates et tarifs n8n au même endroit.

Workflow

Scraper, differ, livrer à n8n en 5 étapes

Cinq réglages, aucun node Code, aucune plomberie de stockage. Tout est déclaratif.

01

Définir ce qu'il faut scraper

Choisissez l'URL cible et le sélecteur CSS qui isole le bloc qui vous intéresse — une fiche produit, une grille tarifaire, une ligne de changelog. DiffHook rend la page et ne garde que le HTML correspondant.

02

Choisir ce qui compte comme changement

Diff en texte seul pour ignorer les retouches de style, ou diff HTML complet pour attraper chaque attribut. Activez include_html: true quand vous voulez que n8n voie le markup brut en plus du texte extrait.

03

Créer le moniteur

Un POST unique sur /v1/monitors avec l'URL, le sélecteur, l'intervalle et une livraison webhook pointant vers votre workflow n8n. Pas de cron, pas de stockage, pas de détection de doublons — DiffHook s'occupe de tout.

04

Recevoir le diff dans n8n

Le déclencheur Webhook de n8n se lance avec un corps JSON signé contenant previous_html, current_html et le texte extrait. Vérifiez le HMAC dans un node Crypto, puis passez aux étapes suivantes.

05

Parser, enrichir, router

Utilisez les nodes HTML Extract ou Code de n8n pour extraire des champs structurés du diff, enrichissez avec un node IA si besoin et envoyez le résultat vers Slack, Airtable, Notion ou une base de données.

Exemple d'API

Scraper et differ en une seule requête

Définition de moniteur déclarative — include_html expose le markup brut pour que n8n puisse le parser plus loin dans le pipeline.

POST /v1/monitors
POST https://api.diffhook.com/v1/monitors
Authorization: Bearer $DIFFHOOK_API_KEY
Content-Type: application/json

{
  "type": "html_css",
  "url": "https://competitor.example.com/products",
  "css_selector": "main .product-card",
  "include_html": true,
  "interval_seconds": 900,
  "deliveries": [
    {
      "type": "webhook",
      "url": "https://n8n.yourdomain.com/webhook/scrape-products"
    }
  ]
}

Workflow importable

Un workflow de scraping n8n prêt à l'emploi

Le template parse le diff, extrait les fiches produit avec HTML Extract, et expédie les lignes structurées vers un Google Sheet. Remplacez simplement le node de destination par le vôtre.

FAQ

Scraping web n8n — questions fréquentes

Pourquoi déporter le scraping de n8n vers DiffHook ?
Trois raisons : compute, exactitude et complexité. Compute, parce que sonder une dizaine d'URL depuis n8n toutes les cinq minutes brûle des minutes d'exécution qu'il y ait eu changement ou non. Exactitude, parce que coder soi-même un « est-ce différent ? » dans un node Code est la meilleure recette pour recevoir des alertes en double à 3h du matin. Complexité, parce qu'un moniteur DiffHook tient en un POST alors que l'équivalent n8n demande au moins quatre nodes plus un datastore.
DiffHook peut-il scraper des pages rendues en JavaScript ?
Oui. Passez type à html_rendered et choisissez le moteur (Playwright ou Puppeteer). DiffHook attend un sélecteur ou un signal de réseau inactif avant de prendre l'instantané, donc les SPA et les applis React rendues côté client fonctionnent d'emblée. Voir les pages dédiées n8n Playwright et n8n Puppeteer pour les exemples par moteur.
Comment obtenir des données structurées, pas juste du HTML brut ?
Deux approches. Utilisez un sélecteur CSS précis pour isoler un élément (DiffHook renvoie le texte extrait directement dans extracted_text), ou activez include_html: true et parsez le fragment HTML dans n8n avec le node HTML Extract. Les deux chemins figurent dans le template importable.
Le scraper respecte-t-il robots.txt et les limites de débit ?
Oui. Chaque moniteur a un intervalle configurable (jusqu'à 60 secondes sur les plans payants) et DiffHook ajoute du jitter et un backoff exponentiel sur les réponses 429 / 503. Si une cible sert un disallow dans robots.txt, le moniteur est marqué comme bloqué dans le tableau de bord et arrête de fetcher.
Que se passe-t-il si le site ajoute un CAPTCHA ou bloque le scraper ?
DiffHook affiche le statut du dernier fetch sur chaque moniteur. Quand un site commence à bloquer, vous le voyez en statut rouge et le dernier cache valide est conservé pour que n8n ne reçoive pas un diff bidon. Vous pouvez alors changer de user agent, passer au moteur rendu ou ajouter des headers par moniteur — sans toucher à n8n.

Workflows associés

Aussi parfait avec DiffHook

Arrêtez de scraper au cron. Scrapez au changement.

Offre gratuite, checks toutes les 60 secondes, payloads signés HMAC, moteurs Playwright et Puppeteer inclus. Sans carte, sans engagement.