Google Sheets est plus qu'une feuille de calcul. Combiné à Google Apps Script (un moteur d'exécution JavaScript), il devient une plateforme de scraping légère permettant de collecter des données publiques sur le web, de suivre les variations de prix, d'extraire des tableaux et d'alimenter des tableaux de bord.
Ce guide vous accompagne pas à pas dans l'élaboration de flux de travail fiables pour le web scraping de Google Sheets avec JavaScript, en les automatisant, en évitant les blocages courants et en intégrant des proxys (y compris un itinéraire pratique pour l'utilisation de fournisseurs tels que OkeyProxy) afin de réduire les 403 erreurs et d'améliorer les taux de réussite.
Note rapideLes sites de scraping doivent toujours respecter le fichier robots.txt, les conditions d'utilisation et la législation locale. Utiliser le scraping pour des données publiques légitimes et à des fins de recherche/suivi.
Qu'est-ce que Google Sheets Web Scraping avec Javascript ?
Google Sheets web scraping JavaScript consiste à utiliser Google Sheets avec Google Apps Script (un environnement JavaScript) pour récupérer par programme des pages web, extraire des données structurées et insérer ces données dans une feuille. Apps Script expose UrlFetchApp pour récupérer le contenu et le SpreadsheetApp pour écrire les résultats. Pour de nombreux cas d'utilisation rapides, c'est rapide, sans serveur et gratuit (dans la limite des quotas Apps Script).
Pourquoi utiliser Google Apps Script (Urlfetchapp) ?
- Environnement familier: Syntaxe JavaScript, facile à démarrer.
- Pas d'infrastructure: fonctionne sur les serveurs de Google - pas de serveur à gérer.
- Intégration: écrit directement dans Google Sheets, envoie des courriels, déclenche des actions, etc.
- ProgrammationLes déclencheurs temporels permettent d'automatiser les opérations de nettoyage périodiques.
Limites à connaître: Apps Script s'exécute à partir de l'infrastructure de Google (les requêtes proviennent donc de plages d'adresses IP de Google), il a des quotas d'exécution et de temps, et il ne dispose pas de bibliothèques d'analyse HTML intégrées et robustes comme Cheerio (vous pouvez contourner ce problème ou utiliser un proxy/relais externe pour les tâches plus lourdes).
- Aller au-delà d'IMPORTXML: Si vous avez déjà essayé d'extraire des données d'une feuille de calcul, vous avez sans doute rencontré le problème de l'utilisation d'une feuille de calcul.
=IMPORTXMLfonction.
Qu'est-ce que IMPORTXML? Il s'agit d'une formule intégrée de Google Sheets qui vous permet d'extraire des données d'un site web spécifique en fournissant une URL et un XPath (une "carte" vers les données). Par exemple, cette formule permet d'extraire des données d'un site web spécifique : =IMPORTXML("https://example.com", "//h1") permet d'afficher le titre principal d'une page.
Bien que cela semble facile, cela échoue souvent dans le monde réel pour des raisons principales. Par exemple, de nombreux sites web modernes sont des "applications à page unique" (construites avec React ou Vue). IMPORTXML ne peut que lire le code source initial ; il ne peut pas "attendre" que JavaScript charge les données réelles.
Exemple simple de récupération : Récupérer du HTML et écrire dans une feuille
Un script Apps minimal qui récupère une page et écrit le titre sur une feuille :
function fetchPageTitle() {
const url = 'https://example.com' ;
const resp = UrlFetchApp.fetch(url, { muteHttpExceptions : true }) ;
const html = resp.getContentText() ;
const titleMatch = html.match(/([^<]*)/i) ;
const title = titleMatch ? titleMatch[1].trim() : 'Aucun titre trouvé' ;
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
sheet.appendRow([new Date(), url, title]) ;
}
Cette méthode convient aux pages statiques simples. Pour un contenu plus structuré (tableaux, listes), vous aurez besoin d'une logique d'analyse.
Parsing HTML : Stratégies et exemples
Option A - Analyse légère des expressions rationnelles et des chaînes de caractères
Utile pour les petites pages prévisibles. Pas robuste pour le HTML malformé.
function parseTable(html) {
// exemple brut - ne vous fiez pas aux expressions rationnelles pour le HTML complexe
const rows = html.match(/]*>([\s\S]* ?)/gi) || [] ;
return rows.map(r => {
const cols = (r.match(/]*>([\s\S]* ?)/gi) || [])
.map(c => c.replace(/]+>/g, '').trim()) ;
return cols ;
}) ;
}
Option B - XmlService pour le HTML/XML bien formé
XmlService peut analyser du XHTML ou du HTML ordonné converti en XML, mais de nombreuses pages ne sont pas des XML valides.
Option C - Décharger l'analyse vers un service externe
Pour les pages complexes, la meilleure approche consiste à exécuter un petit microservice d'analyse (Node.js + Cheerio/Puppeteer) sur Cloud Run ou Cloud Functions. Votre Apps Script appelle ce service (qui renvoie du JSON), et le service s'occupe de l'analyse HTML et du travail anti-bot.
Gestion du contenu dynamique (rendu JS)
De nombreux sites modernes rendent le contenu côté client via JavaScript (AJAX). UrlFetchApp récupère uniquement le HTML du serveur - il n'exécute pas le JavaScript de la page.
Options :
- Trouver le point de terminaison JSON/XHR utilisé par la page et l'appeler directement (inspecter l'onglet Network dans DevTools).
- Utiliser un navigateur sans tête (Puppeteer ou Playwright) hébergé sur Cloud Run/Cloud Functions pour rendre la page et renvoyer du HTML ou du JSON. Appelez ce moteur de rendu à partir d'Apps Script.
- Utiliser des services de rendu tiers (payés) qui renvoient le HTML entièrement rendu ; assurer la conformité.
Automatiser le scraping avec des déclencheurs et la gestion des erreurs
- Déclencheurs temporels : programmer un raclage quotidien/horaire.
- Retard exponentiel : sur HTTP 429/5xx, retarder et réessayer.
- Journalisation et notifications : journalisation des échecs et envoi d'un courrier électronique en cas d'erreurs persistantes.
Exemple: créer un élément déclencheur quotidien :
function createDailyTrigger() {
ScriptApp.newTrigger('fetchPageTitle')
.timeBased()
.everyDays(1)
.atHour(6)
.create() ;
}
Problèmes de blocage courants : Réputation IP, limites de débit, Captchas
Les sites web bloquent activement le scraping via :
- Réputation IPLes IP des fournisseurs de clouds connus (comme les IP des Apps Script de Google) peuvent être limitées ou bloquées.
- Limites de tauxtrop de demandes dans un court laps de temps déclenche des étranglements.
- CAPTCHAsLes informations sont présentées lorsqu'un comportement semble automatisé ou suspect.
Principales mesures de défense :
- Respect
robots.txt et les contraintes juridiques et techniques.
- Ajouter des délais de type humain entre les demandes.
- Les en-têtes des requêtes doivent rester légitimes (
User-Agent, Accepter).
- Utilisez des mandataires pour diversifier l'origine des demandes (voir ci-dessous).
- Évitez d'essayer de contourner les CAPTCHA - utilisez plutôt les API officielles ou la résolution humaine lorsque c'est possible.
Surmonter les blocages avec les mandataires - Conception et contraintes
Les proxys modifient l'adresse IP source de vos requêtes, de sorte que les sites cibles voient les requêtes provenant d'adresses différentes. Pour Google Sheets :
- Contrainte importante:
UrlFetchApp fonctionne sur les serveurs de Google et n'expose pas la configuration native de l'hôte et du port du proxy. Vous ne pouvez pas définir directement un hôte proxy SOCKS5 ou HTTP dans les options de UrlFetchApp.
Solutions de contournement :
- Relais proxy / fetcher: Déployez un petit service proxy/relais (Cloud Run / Cloud Function / VPS) qui accepte une requête de votre Apps Script et la transmet par le biais d'un proxy configuré (tel que OkeyProxy). Apps Script appelle le point de terminaison du relais (
https://your-relay.example.com/fetch?url=...), et le relais effectue la recherche par procuration et renvoie le code HTML/JSON. C'est l'approche la plus fiable et la plus souple.
- API HTTP-forward du fournisseur: Certains fournisseurs de proxy exposent un point final d'API HTTP qui peut récupérer des URL arbitraires en votre nom. Si OkeyProxy ou un autre fournisseur propose une API de transfert authentifié, vous pouvez l'appeler directement depuis Apps Script (aucun relais n'est nécessaire). Consultez la documentation du fournisseur.
Note de sécurité: Lorsque vous utilisez un relais, sécurisez-le (clé API, HTTPS) afin que seul votre Apps Script puisse l'utiliser.
Captchas : Que faire lorsque vous les rencontrez ?
N'essayez pas de contourner les captchas par programme, sauf si vous en avez l'autorisation explicite. Contourner les captchas pour échapper aux protections peut être illégal et constitue une violation des conditions d'utilisation de nombreux sites.
Si vous rencontrez fréquemment des captchas :
- Ralentir le rythme des demandes.
- Améliorer la confiance dans l'IP (utiliser les procurations résidentielles tournantes ou Proxies ISP statiques tel que le propose OkeyProxy).
- Pour les recherches légitimes à grande échelle, contactez le propriétaire du site pour obtenir l'accès ou les points d'extrémité de l'API.
- Pour les CAPTCHA inévitables dans un flux de travail, utilisez des services d'interaction humaine ou des partenariats officiels - et assurez la conformité.
Bonnes pratiques (vitesse, en-têtes, quotas, éthique)
Construire un scraper qui fonctionne est une chose, mais s'assurer qu'il reste fiable, respectueux et non bloqué nécessite une approche plus disciplinée et "humaine" de l'automatisation.
📜 Respecter les robots.txt et les ToS du site
Avant d'extraire le moindre octet de données, vérifiez toujours les règles du site cible : rester conforme est le seul moyen d'assurer la viabilité à long terme de votre projet.
🎭 Utiliser des en-têtes réalistes
Incorporez les en-têtes User-Agent, Accept-Language et Referer dans vos options UrlFetchApp afin que vos requêtes ressemblent à un navigateur standard plutôt qu'à un script.
⏳ Mise en œuvre de la limitation du débit et de la gigue
Ne soumettez pas un serveur à un millier de requêtes par seconde. Mettez en place un "jitter" (intervalles de sommeil aléatoires) entre les recherches pour que vos modèles de trafic restent naturels.
🚦 Réponses du moniteur et backoff
Mettez en place une logique pour détecter les réponses 429 (trop de demandes) ou 5xx (erreur du serveur). Si le site vous demande de ralentir, écoutez immédiatement.
⚖️ Éviter la violation des droits d'auteur
Utilisez les données récupérées à des fins d'analyse interne, de recherche ou de surveillance des prix, mais ne récupérez jamais de matériel protégé par des droits d'auteur en vue d'une redistribution ou d'une utilisation commerciale publique.
📝 Enregistrez et vérifiez vos déclencheurs
Étant donné que Google Apps Script s'exécute en arrière-plan, tenez un journal simple des temps d'exécution et des codes d'erreur afin de pouvoir déboguer rapidement les défaillances "silencieuses".
Conclusion
Le scraping web de Google Sheets avec JavaScript (Apps Script + UrlFetchApp) est une solution pragmatique pour de nombreuses tâches légères de scraping et de monitoring.
Pour les pages qui bloquent les IP des centres de données ou qui déclenchent fréquemment des captchas, l'introduction d'une stratégie de proxy contrôlée - idéalement via un relais sécurisé qui utilise des proxys de FAI résidentiels/statiques d'un fournisseur réputé tel qu'OkeyProxy - augmente considérablement le succès tout en conservant votre flux de travail sans serveur et intégré à Sheets.
Questions fréquemment posées
Q : Apps Script peut-il utiliser directement des proxies ?
R : Non - UrlFetchApp ne fournit pas de paramètres d'hôte/port de proxy intégrés. Utilisez un relais ou l'API côté serveur du fournisseur.
Q : Est-il légal d'explorer des sites web ?
R : Cela dépend. Les données publiques peuvent souvent être récupérées à des fins de recherche et de surveillance, mais il convient de toujours respecter les CGU du site et les lois (droits d'auteur, protection de la vie privée, règles anti-scraping). En cas de doute, contactez le propriétaire du site.
Q : Qu'en est-il des captchas ?
R : Utilisez des approches légitimes : ralentissez les requêtes, améliorez votre réputation IP (proxies résidentiels) ou obtenez un accès API. Évitez d'essayer de déjouer les captchas de manière programmatique sans autorisation explicite.
Défiler vers le haut






