Web Scraping simple avec Google Sheets â Scraping leboncoin
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.
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.
- 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.
- 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]/a
correspond 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 !
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")
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']")
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é.
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
Commentaires
Enregistrer un commentaire
đ Hello,
N'hĂ©sitez pas Ă commenter ou vous exprimer si vous avez des trucs Ă dire . . .đ