Business process automation expert
Exploitez la puissance des données web sans nécessiter de compétences avancées en codage ! Ce tutoriel vous montre comment extraire facilement des informations de sites web directement dans Google Sheets en utilisant Google Apps Script, ouvrant ainsi un monde de possibilités pour les entreprises. Automatisez l’étude de marché, l’analyse de la concurrence et la collecte de données, économisant ainsi d’innombrables heures de travail manuel et obtenant des informations précieuses, le tout sans nécessiter une connaissance approfondie du HTML.
L’extraction de données web s’apparente à copier et coller automatiquement des informations depuis des sites web. Imaginez avoir un assistant numérique qui visite des sites web et collecte automatiquement des informations spécifiques. Au lieu de sélectionner et copier manuellement du texte ou des images, un programme effectue cette tâche pour vous, collectant des données telles que les prix, les détails des produits ou les coordonnées.
Ces données extraites peuvent ensuite être utilisées à diverses fins, notamment pour comparer les prix entre différents détaillants en ligne, collecter des prospects commerciaux, créer des notifications pour les changements de contenu, et plus encore. Essentiellement, l’extraction de données web automatise un travail manuel fastidieux, économisant un temps et des efforts considérables en extrayant et en organisant efficacement de grandes quantités de données web.
Dans l’environnement commercial concurrentiel d’aujourd’hui, la productivité et l’allocation optimisée des ressources sont cruciales pour le succès. L’extraction de données web est un outil précieux pour atteindre ces objectifs, améliorant considérablement la productivité en automatisant la collecte de données chronophage et l’analyse.
En automatisant l’extraction de données à partir de sites web, les entreprises économisent un temps et des efforts considérables par rapport aux méthodes manuelles. Cette efficacité accrue permet aux équipes de se concentrer sur des initiatives stratégiques plutôt que sur des tâches répétitives.
De plus, les données recueillies grâce à l’extraction de données web ne sont pas simplement une fin en soi ; elles servent d’entrée cruciale pour d’autres processus d’automatisation. Par exemple, les données extraites peuvent alimenter des stratégies de tarification dynamiques basées sur la concurrence dans le commerce électronique ou identifier automatiquement des opportunités d’investissement précieuses en agrégeant les annonces immobilières de plusieurs portails.
Cette intégration transparente avec d’autres flux de travail d’automatisation amplifie l’impact de l’extraction de données web, ce qui en fait un atout indispensable pour toute entreprise tournée vers l’avenir.
Google Apps Script est un langage de script basé sur le cloud, construit sur JavaScript, qui vous permet d’automatiser des tâches et de créer des intégrations puissantes au sein de Google Workspace (anciennement G Suite). Son avantage unique réside dans sa capacité à connecter de manière transparente divers services Google, y compris Gmail, Docs, Drive, Agenda et, surtout, Sheets, ce qui le rend exceptionnellement bien adapté à la création d’automatisations complètes. Cette interconnexion vous permet de créer des flux de travail qui s’étendent sur plusieurs applications, rationalisant les processus et augmentant la productivité.
Pour l’extraction de données web spécifiquement, le service UrlFetchApp
d’Apps Script vous permet de récupérer du contenu directement à partir de pages web, permettant l’extraction automatisée de données et l’intégration avec le reste de vos applications Google Workspace. En envoyant des requêtes HTTP à des sites web, vous pouvez récupérer des données HTML, XML ou JSON. Ces données extraites peuvent ensuite être analysées et structurées en utilisant JavaScript dans le script.
La véritable puissance de cette approche se révèle lorsqu’elle est combinée avec Google Sheets : les données extraites peuvent être directement écrites dans des feuilles de calcul, offrant un environnement pratique et familier pour le stockage, l’organisation, l’analyse, la visualisation des données et une automatisation plus poussée.
Nous allons créer un système qui effectue les opérations suivantes :
Tout d’abord, vous avez besoin d’une feuille Google Sheet. Votre feuille Google Sheet doit comporter au moins trois colonnes :
Vous trouverez ici un modèle pour la feuille de calcul.
La prochaine étape cruciale pour votre outil d’extraction de données consiste à lui indiquer exactement quelle information récupérer sur la page web. C’est là que le sélecteur CSS entre en jeu.
Considérez un sélecteur CSS comme une adresse pour un élément spécifique sur une page web – comme le prix, le titre d’un produit ou le nombre d’avis. Voici comment vous pouvez facilement trouver cette adresse en utilisant le navigateur Chrome :
C’est tout ! Le sélecteur CSS pour cet élément spécifique est maintenant copié dans votre presse-papiers. C’est la valeur que vous collerez ensuite dans la colonne C de votre feuille Google Sheet pour cette URL de produit, indiquant à votre script d’extraction exactement quoi rechercher sur cette page.
Maintenant, examinons le code qui opère la magie. Ouvrez l’éditeur de script dans votre feuille Google Sheet en allant dans « Outils » > « Éditeur de scripts ». Copiez et collez le code fourni ci-dessous dans l’éditeur de script.
/**
* Récupère les prix des produits à partir des URL d'une feuille Google Sheet et met à jour la feuille avec les prix.
*/
// Configuration (Mettez à jour avec vos valeurs réelles)
const SHEET_ID = `VOTRE_ID_FEUILLE`; // Remplacez par l'ID réel de votre feuille
const SHEET_NAME = `VOTRE_NOM_FEUILLE`; // Remplacez par le nom réel de votre feuille
const URLS_COLUMN_ID = 1; // Colonne contenant les URL (A = 1)
const CSS_SELECTOR_COLUMN = 2; // Colonne contenant les sélecteurs CSS (B = 2)
const PRICE_COLUMN = 3; // Colonne pour écrire les prix (C = 3)
const REQUEST_DELAY = 1000; // Délai entre les requêtes en millisecondes (1 seconde)
/**
* Fonction principale pour exécuter le script.
*/
function main() {
const urlData = getUrlsFromSheet();
if (urlData.length === 0) {
Logger.log("Aucune URL à traiter.");
return;
}
const prices = [];
for (let i = 0; i < urlData.length; i++) {
const url = urlData[i].url;
const selector = urlData[i].selector;
const html = fetchHtml(url);
const price = extractPrice(html, selector);
prices.push(price);
Utilities.sleep(REQUEST_DELAY); // Délai entre les requêtes
Logger.log(`URL traitée ${i+1}/${urlData.length}: ${url}, Prix: ${price}`);
}
updateSheet(prices);
}
/**
* Ouvre la feuille de calcul et récupère les URL et les sélecteurs.
* @return {Array<{url: string, selector: string}>} Un tableau d'objets contenant les URL et les sélecteurs.
*/
function getUrlsFromSheet() {
const ss = SpreadsheetApp.openById(SHEET_ID);
const sheet = ss.getSheetByName(SHEET_NAME);
const lastRow = sheet.getLastRow();
if (lastRow < 2) return []; // Gérer la feuille vide
const urls = sheet.getRange(2, URLS_COLUMN_ID, lastRow - 1)
.getValues()
.flat(); // Obtenir les valeurs sous forme de tableau 1D.
const selectors = sheet.getRange(2, CSS_SELECTOR_COLUMN, lastRow - 1)
.getValues()
.flat(); // Obtenir les valeurs sous forme de tableau 1D.
const urlData = [];
for (let i = 0; i < urls.length; i++) {
urlData.push({
url: urls[i],
selector: selectors[i]
});
}
return urlData;
}
/**
* Récupère le contenu HTML d'une URL.
* @param {string} url L'URL à récupérer.
* @return {string|null} Le contenu HTML, ou null en cas d'erreur.
*/
function fetchHtml(url) {
try {
const options = {
method: 'get',
muteHttpExceptions: true,
headers: { // Ajout de quelques en-têtes courants
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
'Accept-Language': 'en-US,en;q=0.9',
'Cache-Control': 'no-cache'
}
};
const response = UrlFetchApp.fetch(url, options);
if (response.getResponseCode() === 200) {
return response.getContentText();
} else {
Logger.log(`Erreur lors de la récupération de ${url}: ${response.getResponseCode()} - ${response.getContentText()}`);
return null;
}
} catch (error) {
Logger.log(`Erreur lors de la récupération de ${url}: ${error}`);
return null;
}
}
/**
* Extrait le prix du HTML en utilisant Cheerio.
* @param {string} html Le contenu HTML.
* @param {string} selector Le sélecteur CSS à utiliser.
* @return {number|null} Le prix extrait sous forme de nombre, ou null s'il n'est pas trouvé.
*/
function extractPrice(html, selector) { // Ajout du paramètre selector
if (!html || !selector) return null; // Ajout de la vérification du sélecteur
try {
const $ = Cheerio.load(html);
let priceText = $(selector).text(); // Utiliser le sélecteur fourni
if (!priceText) {
Logger.log("Élément de prix non trouvé avec le sélecteur : " + selector);
return null;
}
priceText = priceText.replace(/,/g,'.');
let price = parseFloat(priceText.replace(/[^0-9.]/g, ''));
if (isNaN(price)) {
Logger.log("Impossible d'analyser le prix en nombre : " + priceText);
return null;
}
return price;
} catch (error) {
Logger.log("Erreur lors de l'extraction du prix : " + error);
return null;
}
}
/**
* Met à jour la feuille Google Sheet avec les prix extraits.
* @param {Array<number|null>} prices Un tableau de prix à écrire dans la feuille.
*/
function updateSheet(prices) {
if (prices.length === 0) return;
const ss = SpreadsheetApp.openById(SHEET_ID);
const sheet = ss.getSheetByName(SHEET_NAME);
const lastRow = sheet.getLastRow();
const urlsCount = sheet.getRange(2, URLS_COLUMN_ID, lastRow - 1).getValues().flat().length;
if (prices.length !== urlsCount) {
Logger.log(`Le nombre de prix (${prices.length}) ne correspond pas au nombre d'URL (${urlsCount}).`);
return;
}
sheet.getRange(2, PRICE_COLUMN, prices.length, 1).setValues(prices.map(price => [price]));
}
Avant de commencer à utiliser ce code, n’oubliez pas d’inclure la bibliothèque Cheerio. Cette bibliothèque tierce nous aide à traiter le HTML plus facilement et doit être ajoutée manuellement à notre projet. Pour ce faire :
1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0
La bibliothèque devrait maintenant apparaître dans la boîte de dialogue « Bibliothèques ».
Notre script Google Apps Script pour le suivi des prix des produits est composé de plusieurs fonctions clés qui travaillent ensemble. Voyons ce que chacune fait :
1. main()
main
est le point d’entrée principal qui orchestre l’ensemble du processus de récupération et de mise à jour des prix. Elle appelle d’autres fonctions dans le bon ordre pour accomplir la tâche.getUrlsFromSheet()
pour récupérer la liste des URL et leurs sélecteurs CSS correspondants depuis votre feuille de calcul.fetchHtml()
pour télécharger le contenu de la page web.extractPrice()
pour trouver le prix.Utilities.sleep()
) pour éviter de surcharger les sites web.updateSheet()
pour réécrire tous les prix collectés dans la feuille de calcul.main()
comme un Chef de projet. Il n’effectue pas les tâches spécialisées lui-même, mais il connaît l’objectif global et dirige les spécialistes (getUrlsFromSheet
, fetchHtml
, extractPrice
, updateSheet
) dans le bon ordre, s’assurant que le projet (suivi des prix) est complété étape par étape.2. getUrlsFromSheet()
SHEET_ID
).SHEET_NAME
).URLS_COLUMN_ID
).CSS_SELECTOR_COLUMN
).3. fetchHtml()
url
en entrée.UrlFetchApp.fetch()
de Google Apps Script pour effectuer une requête vers cette URL.options
spécifiques (comme les en-têtes User-Agent
) pour que la requête ressemble davantage à celle provenant d’un navigateur web standard, ce qui peut aider à éviter d’être bloqué par certains sites web.null
.fetchHtml()
comme un Éclaireur Web. Vous lui donnez une adresse (URL), et il se rend à cet emplacement sur internet, fait une copie du plan sous-jacent de la page (le HTML), et vous rapporte ce plan. Il essaie même de ressembler à un visiteur ordinaire pour éviter les soupçons.4. extractPrice()
html
et le selector
en entrée.Cheerio
(qui doit être ajoutée à votre projet Apps Script) pour analyser le HTML, ce qui facilite la recherche.selector
fourni pour localiser l’élément HTML exact contenant le prix.null
. Sinon, elle retourne le prix numérique.extractPrice()
comme un Détective de Données. Il reçoit un grand document (HTML) et un indice spécifique (le sélecteur CSS). Il utilise l’indice pour trouver la donnée exacte (le texte du prix), nettoie soigneusement toutes les marques obscurcissantes (symboles monétaires, virgules) et rapporte la valeur numérique finale trouvée.5. updateSheet()
prices
(collecté par la fonction main
) en entrée.getUrlsFromSheet
).PRICE_COLUMN
), en commençant à partir de la deuxième ligne et en couvrant le nombre de lignes nécessaire.[[prix1], [prix2], ...]
).setValues()
.Après avoir collé le code dans l’éditeur de script :
main()
. Vous devrez autoriser le script à accéder à votre feuille Google Sheet.extractPrice(html, selector)
est la partie la plus spécifique au site web. La manière dont les prix sont affichés en HTML varie d’un site à l’autre. Par conséquent, vous devrez peut-être ajuster le code de cette fonction pour correspondre à la structure des sites web que vous suivez. Vous devrez probablement inspecter le code source HTML du site web pour trouver un sélecteur CSS approprié.Ce système automatisé vous fera gagner du temps et des efforts en suivant automatiquement les prix des produits pour vous. En comprenant les bases de son fonctionnement, vous pouvez même le personnaliser davantage pour l’adapter à vos besoins spécifiques.
La dernière étape consiste à planifier l’exécution automatique de votre script chaque jour à l’heure souhaitée.
main()
.Bien que le service UrlFetchApp
de Google Apps Script soit efficace pour de nombreux sites web, il peut ne pas convenir aux sites fortement protégés qui emploient des mesures anti-extraction de données telles que les CAPTCHA et le blocage d’IP. Tenter de contourner ces protections avec Apps Script seul est souvent peu fiable.
L’extraction de données de tels portails ou l’engagement dans des pratiques dites « black hat » (répréhensibles) nécessite des solutions tierces dédiées qui utilisent des techniques telles que les proxys rotatifs et les solveurs de CAPTCHA. Parmi ces services, on peut citer Apify, Bright Data, ParseHub et Scraper API.
Il est important de noter que ces services peuvent souvent être intégrés dans les processus d’automatisation de Google Workspace. Cela signifie que vous pouvez toujours construire un flux de travail automatisé complet au sein de votre infrastructure Workspace, même si une solution tierce d’extraction de données est nécessaire. Les données extraites par ces services peuvent être intégrées de manière transparente dans Google Sheets, Docs ou d’autres applications Workspace en utilisant leurs API ou des webhooks. Il est fortement recommandé de respecter les conditions d’utilisation des sites web et le fichier `robots.txt`, et d’effectuer l’extraction de données de manière responsable et éthique.
Google Workspace impose des quotas et des limitations sur `UrlFetchApp` pour prévenir les abus, maintenir la stabilité du service et assurer une utilisation équitable entre tous les utilisateurs. Ces limitations sont cruciales à comprendre lors de la conception de scripts d’extraction de données web :
UrlFetchApp
ou d’un traitement complexe, il pourrait atteindre cette limite et cesser de s’exécuter. Cependant, vous pouvez souvent redémarrer le script après qu’il se soit arrêté en raison de l’atteinte de la limite de temps d’exécution, ce qui vous permet de traiter des ensembles de données plus importants ou d’effectuer des tâches plus complexes par étapes.UrlFetchApp
que vous pouvez effectuer dans des délais spécifiques. Ces limites sont conçues pour éviter de surcharger les sites web cibles avec des requêtes. Au moment de la rédaction de ce document, les comptes Google gratuits ont généralement une limite quotidienne d’environ 20 000 appels UrlFetchApp
, tandis que les comptes Google Workspace ont généralement une limite beaucoup plus élevée, d’environ 100 000 appels par jour.fetchAll()
: Bien qu’Apps Script fonctionne dans un environnement monothread et n’offre pas de véritable récupération simultanée, l’utilisation de UrlFetchApp.fetchAll()
permet une récupération optimisée de plusieurs URL. Cette méthode réduit considérablement la surcharge par rapport à la récupération séquentielle en gérant plus efficacement la communication réseau, même si les requêtes ne sont pas exécutées en parallèle.En résumé, l’extraction de données web avec Google Apps Script et Google Sheets offre aux entreprises un moyen puissant, accessible et, surtout, gratuit d’automatiser la collecte de données et d’obtenir des informations précieuses. Google Apps Script est disponible aussi bien avec les comptes Google gratuits qu’avec les abonnements Google Workspace, ce qui en fait une solution rentable pour les entreprises de toutes tailles.
De plus, si vous utilisez Google Workspace, s’appuyer sur Apps Script pour vos besoins d’extraction de données web offre une flexibilité et une intégration inégalées au sein de vos flux de travail métier existants. Contrairement aux solutions tierces rigides qui nécessitent souvent des intégrations complexes et des processus de transfert de données, Apps Script se connecte de manière transparente avec les autres applications Workspace.
Nous vous encourageons à explorer les possibilités de l’extraction de données web avec Google Apps Script et Sheets pour vos propres besoins professionnels et à libérer le potentiel de la collecte de données automatisée pour une efficacité améliorée et un avantage stratégique. Le nombre de scénarios où cette puissante combinaison peut être appliquée est pratiquement infini ; de l’automatisation des études de marché et de l’analyse de la concurrence à la rationalisation de la génération de leads et de l’agrégation de contenu, seule votre imagination limite les cas d’utilisation potentiels.
Business process automation expert
1118 Budapest, Ménesi út 24. Hungary
© 2024 bestflow. All rights reserved.