Les workflows de scraping n8n échouent dès qu'un site cible modifie sa structure HTML ou bloque votre IP. La logique de rotation de proxy ajoute de la complexité sans résoudre le problème fondamental : vous analysez du HTML non structuré qui peut changer à tout moment. Une API de recherche structurée renvoie du JSON propre pour Google, Reddit, Amazon et d'autres plateformes via une seule requête POST. Ce tutoriel montre comment remplacer les fragiles nœuds HTTP Request et HTML Extract de n8n par un appel API Scavio qui renvoie des données structurées à chaque fois. Le résultat est un workflow n8n plus simple et plus fiable, sans gestion de proxy.
Prérequis
- Instance n8n en cours d'exécution (cloud ou auto-hébergée)
- Une clé API Scavio depuis scavio.dev
- Un workflow n8n existant avec des nœuds de scraping HTTP
Parcours
Étape 1: Identifier les nœuds de scraping défaillants
Repérez les nœuds HTTP Request qui renvoient des erreurs 403/429 ou les nœuds HTML Extract qui produisent une sortie vide en raison de modifications du DOM.
# Common failure patterns in n8n scraping:
# - HTTP Request returns 403 Forbidden or 429 Too Many Requests
# - HTML Extract yields empty results after site redesign
# - Proxy list expires or gets blocked
# - Rate limiting forces artificial delays between requestsÉtape 2: Remplacer par le nœud API Scavio
Configurez un nœud HTTP Request pointant vers l'API Scavio au lieu du site web cible.
# n8n HTTP Request node configuration:
# Method: POST
# URL: https://api.scavio.dev/api/v1/search
# Authentication: Header Auth
# Name: x-api-key
# Value: {{$credentials.scavioApiKey}}
# Body (JSON):
# platform: google
# query: {{ $json.search_term }}Étape 3: Supprimer les nœuds d'analyse HTML
Supprimez les nœuds HTML Extract et d'analyse regex puisque l'API renvoie directement du JSON structuré.
# Before (fragile):
# HTTP Request -> HTML Extract -> Set (parse) -> Output
#
# After (reliable):
# HTTP Request (Scavio API) -> Output
#
# Access fields directly:
# {{ $json.organic_results[0].title }}
# {{ $json.organic_results[0].link }}
# {{ $json.organic_results[0].snippet }}Étape 4: Tester le remplacement avec Python
Vérifiez que l'API renvoie les données dont vous avez besoin avant de mettre à jour n8n.
import os, requests
API_KEY = os.environ["SCAVIO_API_KEY"]
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": "best crm software 2026"})
data = resp.json()
for r in data.get("organic_results", [])[:3]:
print(f"{r['title']}: {r['link']}")Exemple Python
import os, requests
API_KEY = os.environ["SCAVIO_API_KEY"]
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": "best crm software 2026"})
for r in resp.json().get("organic_results", [])[:5]:
print(r["title"], r["link"])Exemple JavaScript
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"},
body: JSON.stringify({platform: "google", query: "best crm software 2026"})
});
const data = await r.json();
(data.organic_results || []).slice(0, 5).forEach(r => console.log(r.title, r.link));Sortie attendue
A simplified n8n workflow that fetches structured search data from a single API node, replacing all scraping, proxy, and HTML parsing nodes.