Récupérer des données sur le web

Publié le 29/04/2015 | Jérémy Grèze

Collecter et utiliser des données externes permet de réaliser de nombreux projets et études plutôt sympas. On peut par exemple chercher la corrélation entre des ventes et la météo, trouver la liste des séances de cinéma dans un rayon proche, valider ou corriger une adresse postale, etc. Les sujets ne manquent quand on travaille dans la data ! Pourtant, il n'est pas toujours simple de récupérer, de trouver des données externes. Dans cet article, je vous donne quelques pistes et astuces que j'utilise régulièrement.

Les jeux de données téléchargeables

La façon la plus simple de récupérer des données reste de profiter des jeux de données librement accessibles, notamment ceux qui sont distribués dans le cadre de l'Open Data.

Quelques exemples :

Les données sont généralement téléchargeables aux formats CSV ou Excel compressés.

Les API

Des API (Application programming interface) sont mises à disposition par de nombreux site Internet et permettent d'accéder facilement à des jeux de données structurés et utilisables dans des projets (si on exempt la question de droits). Au lieu de télécharger l'ensemble des données, on récupère plutôt la partie des données qui nous intéresse. Par exemple, cela pourrait être la météo d'une ville précise au lieu de l'ensemble du pays ou du continent.

Utiliser une API est un peu plus technique:

Un exemple. Avec une simple URL, je peux connaitre le nombre de partage d'un article du Monde sur Twitter: http://urls.api.twitter.com/1/urls/count.json?url=http://www.lemonde.fr/politique/article/2014/01/13/l-affaire-qui-destabilise-francois-hollande_4346989_823448.html Le résultat (au format JSON) donne 993 partages sur Twitter pour cet article (sur l'affaire Hollande-Gayet).

{"count":993,"url":"http:\/\/www.lemonde.fr\/politique\/article\/2014\/01\/13\/l-affaire-qui-destabilise-francois-hollande_4346989_823448.html\/"}

Une petite liste d'API plutôt pratiques:

Néanmoins, de trop nombreux site n'ont pas encore une API ouverte à tous. C'est bien dommage à mon avis, mais nous allons voir comment faire dans ce cas là.

Les API cachées

Il peut arriver que les sites et services web ne documentent pas publiquement leurs API. Pourtant, des API existent, et parfois même sont complètement ouvertes, c'est-à-dire avec un accès non protégé. Je vais ainsi les qualifier d'API cachées. Elles servent à afficher le contenu sur les applications mobiles ou dynamiquement dans les pages web (via Javascript pour éviter de recharger la page).

Il est certes difficile de trouver les URLs ces API. L'astuce est de passer au crible les communications d'une application mobile ou d'un site web avec un logiciel proxy HTTP. Quelques noms de logiciels: Fiddler (Windows), Charles Proxy (Windows, Mac, Linux), Proxy.app (Mac).

En quelques minutes, j'ai pu découvrir l'API de MK2. Une URL me donne l'ensemble des séances de cinéma qu'ils proposent entre deux dates et à côté de chez moi. Je range les résultats dans un Spreadsheet et je peux m'y retrouver beaucoup plus facilement pour trouver le film que je souhaite voir, plutôt que chercher sur leur site Internet pas très pratique ;-)

Charles Proxy
Trouver les URLs de l'API pour l'application mobile de MK2 avec Charles Proxy.

Scrapper avec Kimono et Import.io

Quand on ne trouve pas d'API, il reste la solution de scrapper les sites, c'est-à-dire d'extraire le contenu des sites avec des logiciels spécifiques ou du code. Cela correspond grosso-modo à aller se servir soit-même. C'est une pratique un peu douteuse, qui peut soulever des problématiques légales, mais qui est largement répandue (après tout, c'est bien ce que fait Google pour indexer le web, les sites de presse, etc.).

Je suis très fan de Kimono qui permet en quelques clics de récupérer et construire des jeux de données à partir de n'importe quelle page internet, et de façon régulière (toutes les heures pas exemple). Le site propose même de récupérer les données extraites sous format de flux RSS (très utile pour votre veille) ou JSON. A noter que tout se fait en ligne, il n'y a pas de logiciel à installer.

Le service Kimono.com permettait de récupérer très facilement des données à partir de n'importe quelle page internet. Le service a désormais fermé, il est néanmoins toujours possible de télécharger le logiciel Kimono Desktop pour réaliser l'extraction des données (au format JSON, CSV ou RSS) depuis son navigateur, mais sans la possibilité d'automatiser l'extraction (scheduling).

Import.io est aussi un bon outil. Un peu plus compliqué mais plus puissant puisqu'il permet de mettre en place un crawler, c'est-à-dire qu'il peut aller chercher du contenu sur plusieurs pages.

Import.io
J'ai essayé de scrapper mon blog avec Import.io

Un blog post de Import.io fait d'ailleurs le point après la fermeture de Kimono sur les alternatives disponibles. Des logiciels intéressants sont mentionnés, notamment data-miner.io et webscraper.io qui peuvent fonctionner dans un navigateur, mais je ne les ai pas essayés.

Scrapper en Python

Pour les cas les plus complexes, il reste la possibilité de récupérer les données en codant. Si vous connaissez le langage Python, ce n'est pas très compliqué. Les librairies Beautiful Soup et Scrapy permettent de débuter rapidement et proposent de nombreux exemples. L'avantage est que vous pouvez choisir le format de sortie, décider de chaîner des tâches, etc.

Dans un article à venir, je monterai comment manipuler les données en provenance des API, particulièrement celles au format JSON. Si vous ne souhaitez pas attendre, je vous conseille de regarder du côté de DSS qui offre une interface très accessible pour manipuler le JSON.

 

Mise à jour du 04/05/2015: Pour en lire plus sur le sujet, je propose la présentation de Aaron Lintz qui propose un petit tour des solutions de scrapping adaptées au recrutement et au marketing. Il met notamment en avant Kimono.

Mise à jour du 31/01/2016: Twitter a retiré son API qui permettait d'obtenir le nombre de partage d'une URL. L'exemple proposé n'est donc plus applicable.

Mise à jour du 01/03/2016: Kimono a fermé, l'article a été mis à jour en conséquence.