n8n+DiffHook

Web scraping con n8n — guidato dal diff, webhook-first

Punta DiffHook alle pagine da raschiare, descrivi cosa estrarre con un selettore CSS, e n8n riceve il diff HTML ogni volta che si muove — già messo in cache, già deduplicato, già firmato.

Lo scraper n8n classico è un Schedule trigger + HTTP Request + HTML Extract + un po' di codice in un nodo Code che confronta con un datastore. Funziona, ma raschia a ogni tick anche quando nulla è cambiato, e la logica «è diverso rispetto all'ultima volta?» finisce per reinventare un piccolo database dentro n8n. DiffHook sposta fetch, parsing HTML e diff fuori da n8n: il flusso viene eseguito una volta per cambiamento reale — non di più.

n8n

L hub completo di n8n + DiffHook

Tutte le ricette, i template e i prezzi n8n in un unico posto.

Flusso

Raschia, diffa e consegna a n8n in 5 passi

Cinque impostazioni, nessun nodo Code, nessun marchingegno di storage. Tutto dichiarativo.

01

Definisci cosa raschiare

Scegli l'URL di destinazione e il selettore CSS che isola il blocco che ti interessa — una scheda prodotto, una tabella prezzi, una voce di changelog. DiffHook renderizza la pagina e tiene solo l'HTML corrispondente.

02

Scegli cosa conta come cambiamento

Diff solo testo per ignorare ritocchi di stile, oppure diff HTML completo per catturare ogni attributo. Imposta include_html: true quando vuoi che n8n veda il markup grezzo accanto al testo estratto.

03

Crea il monitor

Un POST a /v1/monitors con URL, selettore, intervallo e una consegna webhook che punta al flusso n8n. Niente cron, niente storage, niente deduplicazione — di tutto questo si occupa DiffHook.

04

Ricevi il diff in n8n

Il trigger Webhook di n8n parte con un body JSON firmato che contiene previous_html, current_html e il testo estratto. Verifica l'HMAC in un nodo Crypto e passa ai passi successivi.

05

Parsa, arricchisci, instrada

Usa i nodi HTML Extract o Code di n8n per tirare fuori campi strutturati dal diff, arricchisci con un nodo AI se serve e invia il risultato a Slack, Airtable, Notion o a un database.

Esempio API

Raschia e diffa in una sola richiesta

Definizione di monitor dichiarativa — include_html espone il markup grezzo così che n8n possa parsarlo più avanti.

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"
    }
  ]
}

Flusso importabile

Flusso di scraping n8n pronto all'uso

Il template parsa il diff, estrae le schede prodotto con HTML Extract e spedisce le righe strutturate a un Google Sheet. Cambia il nodo di destinazione con il tuo.

FAQ

Web scraping n8n — domande frequenti

Perché spostare lo scraping da n8n a DiffHook?
Tre motivi: calcolo, correttezza e complessità. Calcolo, perché interrogare una dozzina di URL da n8n ogni cinque minuti brucia minuti di esecuzione a prescindere dai cambiamenti. Correttezza, perché costruirsi a mano la logica «è diverso?» in un nodo Code è il modo migliore per ricevere duplicati alle 3 di notte. Complessità, perché un monitor DiffHook è un singolo POST mentre l'equivalente n8n richiede almeno quattro nodi più un datastore.
DiffHook può raschiare pagine renderizzate in JavaScript?
Sì. Imposta type su html_rendered e scegli il motore (Playwright o Puppeteer). DiffHook aspetta un selettore o un segnale di rete ferma prima di fare lo snapshot, quindi SPA e app React renderizzate lato client funzionano subito. Vedi le pagine dedicate n8n Playwright e n8n Puppeteer per esempi specifici per motore.
Come ottengo dati strutturati e non solo HTML grezzo?
Due strade. Usa un selettore CSS preciso per isolare un elemento (DiffHook restituisce il testo estratto in extracted_text) oppure attiva include_html: true e parsa il frammento HTML dentro n8n col nodo HTML Extract. Entrambe le strade sono nel template importabile.
Lo scraper rispetta robots.txt e i limiti di richiesta?
Sì. Ogni monitor ha un intervallo configurabile (fino a 60 secondi sui piani a pagamento) e DiffHook aggiunge jitter e backoff esponenziale sulle risposte 429 / 503. Se il target serve un disallow in robots.txt, il monitor viene segnalato come bloccato nel pannello e il fetch si ferma.
Cosa succede se il sito introduce un CAPTCHA o blocca lo scraper?
DiffHook mostra lo stato dell'ultimo fetch su ogni monitor. Quando un sito comincia a bloccare lo vedi in stato rosso e l'ultima cache valida resta conservata, così n8n non riceve un diff fittizio. Poi puoi ruotare lo user agent, passare al motore renderizzato o aggiungere header per monitor — senza toccare n8n.

Flussi correlati

Perfetti anche con DiffHook

Smetti di scrapare a cron. Scrapa al cambiamento.

Piano gratuito, check ogni 60 secondi, payload firmati HMAC, motori Playwright e Puppeteer inclusi. Senza carta, senza vincoli.