imageintro-php-primairesdroite

Récupérer les données d’un site web via PHP pour les retraiter

Faites connaître ce billet :

La récupération de données directement à partir d’un site internet et leur « organisation » est un sujet qui revient sur les forums de discussion auxquels je peux participer. Pour m’être beaucoup amusé à récupérer des informations sur des sites publics (informations statiques telles que des listes de coordonnées à grande échelle) ou à transformer des fichiers issus de l’open data (public ou non) il m’arrive d’apporter quelques astuces aux questions de cette nature quand elles se posent. En effet, nous vivons dans une période où les données prennent de plus en plus de place, et où savoir les « manipuler » (pas au sens négatif du terme) est forcément un atout.

Alors suite à un besoin perso que j’ai eu, je vous fais partager le dernier exemple en date… comment récupérer une liste CSV exploitable et complète des bureaux de vote de la « primaire de droite » de 2016.

Dans ce billet je détaille…

  • D’où viennent les données que l’on peut traiter en PHP
  • Les étapes à suivre avant d’arriver à la récupération des données
  • Les fonctions PHP utilisées pour extraire les éléments d’une page Web
  • La conception du script de récupération
  • Sa mise en oeuvre
  • Le résultat finalement obtenu en un clic…

Objectif ? Récupérer la liste complète des bureaux de vote qui seront mis en place dans la cadre de la « primaire de droite » en novembre. Car en effet si un site dédié a été mis en place, ainsi qu’un moteur de recherche (qui au passage n’a pas l’air de fonctionner au moment où j’écris pour ma ville…) ou même une liste complète… Il est bien difficile de pouvoir analyser les choses quand on y trouve un intérêt académique (nombre de bureaux, répartition par département, accumulation des bureaux en un même endroit ou au contraire dispersion sur le territoire, etc. etc.) et même si certains journalistes s’y sont attelés, comme chez FranceInfo par exemple avec cette magnifique carte (illustration ci-dessous), exemple de « journalisme de la donnée », il semblerait qu’ils ne soient pas facilement enclin à partager les données brutes à la base de leur réalisation.

Carte des bureaux de vote de la primaire de droite 2016 produite par les journalistes de FranceTVinfo.fr
Carte des bureaux de vote de la primaire de droite 2016 produite par les journalistes de FranceTVinfo.fr

Notons au passage que la loi dite « pour une République numérique » va imposer de plus en plus la diffusion publique d’informations présentées sous des « formats ouverts et aisément réutilisables » ce qui va… sans nul doute… considérablement accroitre le terrain de jeu des programmeurs en herbe que nous sommes…

Si je ne supporte pas franchement le « camp » organisateur de la primaire en question (et là n’est pas la question de ce billet), je me suis dit que récupérer la liste complète des bureaux de vote de manière à pouvoir en avoir une liste « exploitable » de type CSV serait un assez bon exercice PHP. Pour ceux que cela amuse, je vous livre donc le point de départ, quelques étapes pour arriver au résultat, et le résultat.

Mon but est que ça puisse servir d’exercice et d’exemple à ceux qui voudraient s’amuser à faire ce même genre de chose appliquée à d’autres exemples.

Nous partons ici d’un site ouvert au public que nous n’allons pas perturber (ça serait condamnable par la loi), nous récupérons ici des données publiques qui n’ont rien de secret (ça serait là aussi condamnable par la loi), et nous allons les retraiter (ce qui n’est pas interdit) car en l’absence de toute opération qui serait prohibée (comme fusionner ou compiler plusieurs sources de données personnelles par exemple, ce qui pourrait provoquer à bon droit le courroux de la CNIL).

Point de départ

  • Trouver une liste complète : http://www.primaire2016.org/ou-voter/listebureaux
  • Examiner la construction de la page pour un bureau de vote
  • Comprendre l’agencement des informations
  • En déduire la construction d’un script PHP qui va se charger de l’extraction
  • Récupérer les données afin d’en faire ce que l’on souhaite

Fonctions utiles

Au final et c’est sans doute le plus intéressant pour des « débutants », elles sont très peu nombreuses. Et c’est pour ça que ce type d’exercice peut être utile quand on commence à s’intéresser à l’extraction de données à partir de pages web.

Idée générale du script

  • D’abord charger l’ensemble du code source de la liste
  • Ensuite découper les blocs qui correspondent à chaque bureau de vote
  • Ensuite, pour chaque bureau, extraire les 3 informations disponibles
  • Enfin, compiler les résultats obtenus dans une variable tableau globale
  • Construire un fichier CSV à partir de la variable tableau globale
  • L’afficher (ou le rendre téléchargeable… comme on veut)

Code source

Ci-dessous le code source, par ailleurs publié sur http://pastebin.com/embed/FmLe3Fxm

Résultat obtenu

Le résultat intégral est disponible sur pastebin, en 2 parties (car trop long en un seul morceau) : http://pastebin.com/7BEU3MHa et http://pastebin.com/TSYwYKqR

Voici un aperçu du premier des deux fichiers :

Voilà, j’espère que ce petit « exercice » pourra être utile et/ou inspirant pour ceux qui cherchent un exemple pour récupérer des données contenues dans une page web et leur donner une apparence « CSV » afin de pouvoir les réutiliser, par exemple dans Excel.

Je souligne au passage pour ceux qui ne le sauraient pas ou qui n’y auraient pas pensé que l’on peut procéder exactement de la même manière pour rassembler en un seul tableau de données des données qui seraient éparpillées (par exemple au sein d’une grande collection de fichiers XML que PHP peut se charger d’ouvrir un par un et pour l’exploitation desquels il existe même des fonctions de lecture de l’XML sympa), pour récupérer les données issues de tableaux fragmentés en plusieurs pages (il faut ajouter quelque chose qui permet de passer à la page suivante quand on arrive à la fin de la page en cours), etc. etc.

En bref, ça peut se montrer pratique dans bien des situations.

Vive les données brutes et les perspectives qu’ouvrent leurs retraitements !

Laisser un commentaire