Aspirer des données depuis un site web avec Excel, Power Query et Kimono

Mise  à jour 02/05/2014 : cet article existe aussi maintenant en webcast! Merci le GUSS 😉

Vous le savez surement, Power Query est l’add-in Excel publié par Microsoft via son offre Power BI, dédié à l’import de données de sources multiples. On en avait déjà parlé pour importer des fichiers identiques dans un même XLSX, une grosse galère sous Excel nature, une balade avec Power Query.

Logo Power BI

Si nous sommes nombreux à voir en Power Query un outil avec un potentiel exceptionnel, il y a un domaine où il est encore assez faible : l’import de données affichées sur une page web. Enfin ce n’est pas vraiment Power Query qui est faible, c’est plutôt qu’après 2500 lignes de JavaScript, le HTML final des sites est souvent complétement inexploitable…

Logo Kimono Labs

Et un outil fantastique pour contourner le problème c’est kimono. Avec kimono, vous allez générer de manière complétement graphique une API à partir d’un site web, directement depuis de votre navigateur.

On fait juste une pause pour bien laisser ça descendre…

Générer une API, de manière graphique, directement dans le navigateur.

On ne vit pas dans le futur avec ça franchement ? Pour moi c’est le scénario d’usage final. Et pour revenir au sujet du jour, ça les API web, Power Query il maîtrise.

Le mieux pour comprendre tout ça étant certainement de prendre un exemple, on va pratiquer en rapatriant des données depuis MetaCritic, le site web qui agrège les notes données dans la presse (papier ou web) à entre-autres les jeux vidéo.

La source : les meilleurs jeux PC de 2014

Capture d'écran de MetaCritic

On va commencer en essayant de se connecter directement à MetaCritic via Power Query, pour constater l’inutilisabilité de la chose :

1 – Je lance Excel, direction l’onglet Power Query, option importer depuis un site web, puis je renseigne l’adresse du site source :

Power Query - Connexion à un site web

2 – Hum, le navigateur de Power Query ne s’en sort pas tout seul, on va creuser (Edit) :

Power Query - Connexion à un site web

3 – Et boum, bon courage ! Si quelqu’un a trouvé une méthode pour s’y retrouver, je suis preneur, moi j’abandonne là en général

Power Query - Connexion à un site web

Alors à la place on va se connecter à kimono (on s’enregistre, on ajoute le bookmarklet à sa barre de raccourci) et créer l’API de manière graphique, c’est parti!

1 – J’ouvre mon navigateur, je vais sur le site source et j’utilise kimonify (le bookmarklet). La barre d’outils Kimono apparaît en haut de la page, et je commence par importer les noms des jeux juste en cliquant sur eux dans la page de MetaCritic. Le moteur de Kimono reconnait alors l’attribut HTML et identifie les 88 noms suivant, je renomme le champ « Nom du jeu » :

Kimono Labs : Premier paramètre
2 – J’appuie sur + dans la barre Kimono, je sélectionne la première note (92 pour DS2), la deuxième (88 pour Hearthstone), et à nouveau Kimono identifie les 88 valeurs suivantes. Je renomme le champs « Note »:

Kimono Labs : Deuxième paramètre
3 – Je répète la manip pour le Score Utilisateur, cette fois-ci le moteur de Kimono hésite un peu, il me propose plusieurs séries et à force de sélectionner d’autres scores et refuser d’autres attributs (ainsi que le label « User Score »), il m’en trouve bien 85 (en effet 3 jeux n’ont pas ce score, mais ça ne casse pas la reconnaissance):

Kimono Labs : Troisième paramètre
4 – J’ai assez d’info pour le moment, je valide (Done dans la barre Kimono), je donne un nom à mon API, et une période de rafraichissement (temps réel pour la démo, mais on peut alléger la charge sur la source en ne rafraichissant le dataset que périodiquement):

Kimono Labs : Validation de l'API
5 – Et Kimono me renvoie vers le tableau de bord de mon API:

Kimono Labs : Interface de gestion de l'API
6 – Via l’onglet « How To Use » je retrouve les éléments nécessaires pour accéder à l’API, y compris les URL (endpoints) que je vais pouvoir transmettre à Power Query en JSON, CSS ou RSS :

Kimono Labs : Interface d'appel de l'API
7 – On peut d’ailleurs tester le EndPoint CSV (ouais je suis oldschool) tout de suite :

Kimono Labs : test du endpoint CSV
8 – Mais le mieux c’est de l’appeler directement depuis Power Query (From Web toujours) :

Power Query : Appel de l'API Kimono
9 – Et après quelques petites manipulations (on retire la première ligne, on sépare les colonnes par délimiteur, on utiliser la première ligne comme nom de colonne, on nettoie le User Score, on filtre les lignes de déchet), on obtient le bon dataset. Note : si vous optez pour le JSON et que vous galérez, regardez cette vidéo, si ça ne marche pas comme ça, c’est que l’API est mal formée, le mieux est de la casser et recommencer (Kimono est encore en beta hein… Celle-là fonctionne et elle est publique).

Power Query : Résultat de l'import
10 – Pour obtenir les données attendues dans Excel :

Power Query et Kimono : résultat de l'import dans Excel

Personnellement je trouve ça juste énorme ! Et en plus tout est en live, la Query dans Excel et l’API côté Kimono, donc il suffit de rafraîchir pour que les données soient mises à jour depuis la source.

Si on rajoute la gestion des paramètres pour l’année (2014, 2013…) côté Power Query, la gestion de la pagination côté Kimono, on a les briques de base pour extraire toute la donnée dont on peut avoir besoin !

Joli non? Et sinon oui, c’est le bon moment pour prendre des actions dans Kimono Labs 😉

12 commentaires sur « Aspirer des données depuis un site web avec Excel, Power Query et Kimono »

  1. Comment tu as trouvé Kimono ? C’est juste ENORME !
    Je pense qu’ils vont se faire manger dans pas longtemps mais par qui…MS, Google, Amazon ?

  2. Salut Florian,

    Très intéressant comme sujet.

    Par contre, il n’y a pas des problèmes de copyrights ?!!

    Finalement, ça permet d’aspirer toutes les données d’un site Web….

    Benjamin

  3. @Djeepy1 : Trouvé sur Hacker News, comme d’hab!

    @Benjamin : Pour les droits d’usage, à l’utilisateur de se renseigner et se conformer aux licences/ »Terms of Use » de chaque site. De mon point de vue je ne crois pas qu’aspirer du contenu publique dans un cadre non concurrentiel direct (cadre privé ou en entreprise sans intention de revendre les données) pose vraiment un problème.

  4. Bonjour,, il me semble que Kimono ne fonctionne pas pour extraire du contenu dans un autre langage que l’anglais lorsque cette langue est disponible sur le site, en effet il n’est pas possible de paramétrer la langue de crawling, donc un site qui détecteras la langue du « client » renverra la page destinée au public US/EN.**Pourriez-vous me le confirmer / infirmer?

  5. Salut super article. Peut on faire un historique dans le temps. Faire un graphique historique des prix comme un graphique de bourse.

  6. Salut « Anonyme », Vu qu’on peut lier à Excel Kimono, il suffit de lier le tableau aux données qui viennent d’une autre feuille excel par exemple ( elle connectée à kimono) , et sa devrai marcher.
    Florian, On peut aussi utiliser Google SpreadSheet (en installant un addon), ce que je fait , ce qui est vraiment génial. Merci pour ce super tutoriel , je m’en sert essentiellement pour récupérer des infos sur les données Open Data et me faire de Grands tableaux style « annuaire » des données.

  7. Par contre, Je me demande comment « Kimonifier » plusieurs pages… Sur une page sa marche très bien. Mais imaginons, pour le tutoriel, si la liste des jeux était divisée en 5 pages, il faudrait faire 5 API ? ou alors une solution existe de prendre en compte les 5 pages dans une seule action? merci de vos retours.

Laisser un commentaire