Collecter les donn√©es d’un site en 30 secondes avec Google Sheets

NB : cet article demande quelques bases en HTML et en CSS, notamment sur les concepts de balise et de classes. Ces bases peuvent n√©anmoins s’acqu√©rir tr√®s rapidement, notamment en consultant le¬†site suivant.

Introduction

La¬†digitalisation de la soci√©t√©¬†et l’essor du e-commerce engendrent chez les¬†webmarketeurs et les managers¬†un besoin croissant d’acc√©der √† l’information en temps r√©el. Il devient de plus en plus primordial d’√™tre capable de consulter instantan√©ment et sur de larges volumes des informations telles que les¬†derniers tweets de telle ou telle entreprise, ou bien les¬†prix de tel ou tel concurrent.

digital-crawl

C’est pourquoi le¬†data crawling, ou collecte automatis√©e de donn√©es, conna√ģt une¬†popularit√© grandissante aupr√®s des managers d’aujourd’hui.¬†Vous pouvez notamment utiliser le¬†data crawling¬†et la m√©thode que nous allons aborder aujourd’hui pour faire du¬†price monitoring de votre concurrence, mener tr√®s rapidement des¬†audits SEO¬†de sites web, √™tre averti en temps r√©el de la publication d’offres d’emploi sur le site carri√®re d’une entreprise ‚Ķ¬†les applications sont illimit√©es.

Au cours de ces derni√®res ann√©es, Google a fortement mis l’accent sur sa suite bureautique, et a¬†r√©ussi √† s√©duire de plus en plus d’entreprises, non sans raisons. Cette strat√©gie culmine avec le r√©cent lancement de¬†GSuite, pr√©sent√© comme un ‚Äúensemble d’applications intelligentes pour les entreprises¬†¬Ľ. Cette d√©finition, quoique pompeuse, est tout √† fait appropri√©e, dans la mesure o√Ļ les applications de Google telles que¬†Drive, Gmail ou encore Sheets¬†se diff√©rencient de la concurrence de par leur facult√© √† se ‚Äúconnecter¬†¬Ľ au web, et √† pouvoir interagir entre elles. Il est ainsi possible de¬†crawler des donn√©es avec Sheets, de les¬†stocker sur Drive, puis de les envoyer automatiquement par¬†mail via Gmail.

Nous allons aujourd’hui nous concentrer sur la possibilit√© de¬†crawler des donn√©es via Sheets, qui est l’√©quivalent¬†SaaS par Google de Microsoft Excel.

1 – La fonction IMPORTXML

D’apr√®s le support de Google, la fonction IMPORTXML ‚Äúimporte des donn√©es depuis des types de donn√©es structur√©es tels que XML, HTML, CSV, TSV et des flux RSS et ATOM XML.¬†¬Ľ

Bien plus que cela, cette formule importe les donn√©es et les rafra√ģchit en live si leur valeur change sur la page que vous crawlez !

Sa syntaxe est la suivante : IMPORTXML("url", "requête_xpath")

Avec :

  • URL : adresse de la page √† examiner, protocole inclus (http, https…)
  • requ√™te_xpath : requ√™te XPath √† ex√©cuter sur les donn√©es structur√©es.

Ne prenez pas peur, malgr√© son nom peu avenant, l’utilisation du XPath est assez simple √† appr√©hender : c’est une sorte ‚Äúd’adresse¬†¬Ľ qui permet de¬†naviguer entre les √©l√©ments d’une page web.¬†De plus, nous allons voir qu’il est tr√®s facile √† obtenir.

2 РLes choses sérieuses commencent

Sans plus attendre, mettons en application ! Pour commencer, nous allons crawler le dernier article de la liste des articles ‚Äúen continu¬†¬Ľ du Monde.

Retrouvez tous les exemples de cet article en cliquant ici : http://bit.ly/2n4Kx5m

Rendez-vous √† l’adresse¬†sur Google Drive, connectez vous √† l’aide de votre compte Google, et cr√©ez une¬†nouvelle Sheets¬†(bouton bleu ‚ÄúNouveau¬†¬Ľ > Sheets en haut √† gauche de l’√©cran).

Maintenant que votre fichier de travail est ouvert, positionnez-vous dans la cellule A1. Pour que notre¬†fonction IMPORTXML¬†fonctionne, nous avons besoin de deux √©l√©ments :¬†l’adresse de la page √† visiter, et le XPath de l’√©l√©ment √† crawler.

Pour l’adresse, il s’agit de¬†http://www.lemonde.fr, nous allons donc maintenant chercher le XPath.

Rendez-vous sur¬†Le Monde, de pr√©f√©rence √† l’aide de¬†Google Chrome¬†(ce tutoriel se basera sur ce navigateur, qui est le plus utilis√© aujourd’hui). La liste des articles ‚Äúen continu¬†¬Ľ est situ√©e √† droite de l’image principale de la page.

  • Positionnez votre souris sur le premier lien de cette liste et effectuez un clic droit > Inspecter.

    digital-crawl-donnees

  • Le code HTML de la page s’affiche, et le¬†code du lien est en surbrillance (en bleu).
  • Positionnez votre souris sur cette surbrillance bleue et effectuez un clic droit > Copy > Copy XPath.

    digital-crawl-donnees

  • Nous avons d√©sormais tout ce dont nous avions besoin ! Retournez sur Google Sheets, positionnez-vous dans la case A1, et inscrivez-y la formule :
=IMPORTXML("http://www.lemonde.fr";"//*[@id='habillagepub']/div[1]/div/div[2]/div[1]/div[1]/ul[1]/li[1]/a")

NB : La partie //*[@id='habillagepub']/div[1]/div/div[2]/div[1]/div[1]/ul[1]/li[1]/acorrespond au XPath que vous avez copié dans votre presse-papier.

Appuyez sur entr√©e, et apr√®s une petite s√©quence de chargement, le r√©sultat s’affiche : f√©licitations, vous avez¬†crawl√© vos premi√®res donn√©es avec Google Sheets !

digital-crawl-donnees

Si vous obtenez une erreur, c’est tr√®s probablement car vous avez des guillemets dans votre XPath, et ceux-ci posent un probl√®me avec les guillemets de la formule. Remplacez-les par des apostrophes et tout devrait marcher !

Exemple : [@id="habillagepub"] devient [@id='habillagepub']

3 – Allons plus loin

Comme vous l’aurez remarqu√©, nous n’avons¬†crawl√©¬†que le dernier article de la liste. Il serait bien plus int√©ressant d’avoir la liste enti√®re.

Ceci n√©cessite de¬†jongler un peu avec le XPath.¬†Vous aurez remarqu√© les num√©ros entre crochets dans celui-ci : ils signifient que nous s√©lectionnons l’√©l√©ment qui porte ce num√©ro dans l’arborescence de la page. Par exemple, ¬ę¬†div[2]¬†¬Ľ signifie que nous s√©lectionnons le 2e √©l√©ment¬†<div>.

En √©tudiant un peu le¬†code, on remarque que tous les liens des articles ‚Äúen continu¬†¬Ľ sont contenus dans des √©l√©ments¬†<a>, eux-m√™me contenus dans des √©l√©ments¬†<li>. Or, si l’on regarde dans le¬†XPath, nous y avons uniquement s√©lectionn√© le premier √©l√©ment¬†<li>¬†:

//*[@id='habillagepub']/div[1]/div/div[2]/div[1]/div[1]/ul[1]/li[1]/a

Si nous voulons sélectionner tous les liens, il suffit donc de supprimer ce numéro, et IMPORTXML crawlera par défaut tous les éléments.

Essayons donc avec la formule suivante :

=IMPORTXML("http://www.lemonde.fr";"//*[@id='habillagepub']/div[1]/div/div[2]/div[1]/div[1]/ul[1]/li/a")

digital-crawl

Vous l’avez sans doute compris, lors de vos propres tentatives, les difficult√©s que vous rencontrerez seront principalement dues au¬†XPath, qui est un outil peut-√™tre compliqu√© √† aborder √† premi√®re vue, mais n√©anmoins tr√®s logique, et extr√™mement puissant. Il est utilis√© dans de tr√®s nombreux domaines et je ne peux que vous conseiller de vous documenter sur ses subtilit√©s. Il est possible que vous ne r√©ussissiez pas √†¬†obtenir le r√©sultat souhait√© du premier coup, il faudra alors essayer de l’obtenir en¬†modifiant le XPath¬†(ce qui peut s’av√©rer hardu au premier essai, j’en conviens).

Pour plus d’informations sur le¬†XPath, c’est par ici :¬†http://www.w3schools.com/xml/xpath_intro.asp.

4 – Allons encore plus loin

Imaginons que nous voulons r√©cup√©rer la liste de tous les articles du¬†blog Cr√®me de la Cr√®me¬†et leur titre. La liste de tous les articles est assez facile √† trouver, il suffit de se rendre sur le¬†sitemap de¬†Cr√®me de la Cr√®me(le fichier qui contient toutes les adresses du site, afin que Google puisse les indexer). Cependant, le titre de l’article est une information qui se trouve ailleurs, sur chacune des pages d’article. Nous allons donc devoir¬†crawler cette information sur chacun des articles du blog.

Le fichier sitemap des posts de Cr√®me de la Cr√®me se situe √†¬†cette adresse. Nous allons donc tout d’abord crawler la liste de toutes les adresses d’articles √† l’aide de la formule :

=importxml("http://blog.cremedelacreme.io/sitemap-posts.xml";"//*[local-name() ='url']/*[local-name() ='loc']")

digital-crawl

Puis, en observant le¬†code d’une page d’article, on se rend compte que le titre est une balise¬†<h1>¬†portant la classe ¬ę¬†post-title¬†¬Ľ. Autre force du¬†XPath, nous allons donc¬†crawler ces titres¬†en les s√©lectionnant par classe :

=importxml(A1;"//h1[@class='post-title']")

Etendez la formule jusqu’au bas de la liste d’articles, et le tour est jou√© ! Si vous voulez¬†crawler plusieurs informations distinctes sur la m√™me page en une seule formule, c’est possible aussi avec IMPORTXML ! Vous n’avez qu’√† inscrire¬†plusieurs XPath¬†√† la suite en les s√©parant par une¬†barre verticale ¬ę¬†|¬†¬Ľ.

Par exemple, si vous voulez aussi, en plus de son titre, crawler les tags de chaque article, utilisez la formule suivante :

=importxml(A1;"//div[@class='tag-links']/a|//h1[@class='post-title']")

Cependant, ici les donn√©es s’affichent les unes en dessous des autres et nous emp√™chent d’√©tendre la formule. On utilisera donc la formule TRANSPOSE qui permet de¬†transformer une colonne en ligne¬†(et inversement), ce qui donne finalement la formule :

=transpose(importxml(A1;"//div[@class='tag-links']/a|//h1[@class='post-title']"))

5 – Repousser les limites

IMPORTXML est une fonction tr√®s puissante pour¬†collecter les donn√©es du web.¬†Comme nous l’avons vu, elle se base essentiellement sur le XPath, et il est primordial que vous vous documentiez un peu plus en d√©tail √† son sujet si vous souhaitez pouvoir¬†crawler toutes les donn√©es que vous souhaitez.

Cette fonction fera le travail souhait√© et vous donnera pleinement satisfaction dans la grande majorit√© des cas. Cependant, il faut lui reconna√ģtre des limites, notamment en terme de¬†vitesse de crawl sur les tr√®s grands volumes de donn√©es.¬†Un simple copier-coller du XPath ne marchera pas toujours non plus, il faudra parfois le modifier un peu avec pour obtenir le r√©sultat souhait√©.

digital-crawl-tips

Il devient alors beaucoup plus int√©ressant de d√©velopper ses propres fonctions pour¬†Google avec Sheets avec GScript, le langage de programmation de Google.¬†Ce langage quasi-jumeau de¬†Javascript¬†vous permettra de d√©velopper des API et des applications tr√®s rapides pour Sheets, Drive, Doc, Gmail… √† la mani√®re des macros sur Excel.

Il devient alors notamment possible de¬†manipuler en profondeur les donn√©es, de¬†programmer des actions dans le temps, de¬†cr√©er dynamiquement des feuilles de calculs, voire m√™me d’envoyer par mail leur r√©sultat de mani√®re automatique ‚Ķ ce que nous verrons dans un prochain article !

Source de ce bel article : cremedelacreme.io

Comments are Closed

Page Reader Press Enter to Read Page Content Out Loud Press Enter to Pause or Restart Reading Page Content Out Loud Press Enter to Stop Reading Page Content Out Loud Screen Reader Support