Extraire des données d’un site dynamique

Eurêka! J’ai enfin trouvé comment extraire des données d’un site dynamique!

sigpeg-accueil

Image en page d’accueil du site du SIGPEG.

Depuis quelques années, le SIGPEG est ma bête noire. Il s’agit du Système d’information géoscientifique pétrolier et gazier du ministère de l’Énergie et des Ressources naturelles. C’est dans ce système qu’on trouve, notamment, la base de données de tous les puits forés au Québec pour explorer ou exploiter du gaz naturel ou du pétrole depuis 1860 qui a servi de base à une carte publiée dans Le Devoir en 2013.

J’ai tenté, depuis 2010, d’automatiser l’extraction de cette base de données. Mais à chaque fois, c’était l’échec.

Pourtant, la fiche de chacun des 979 puits (en date du 31 octobre 2014) s’affiche sur une page web dont l’URL comprend le numéro de ce puits, un numéro unique, comme le montre la capture d’écran ci-dessous. Normalement, il est facile d’extraire des données d’un site avec un pattern aussi clair dans ses URL.

sigpeg-fiche

Mais voilà: ces fiches apparaissaient dans d’infâmes fenêtres surgissantes (popups). Et pour une raison que je n’arrivais pas à expliquer, à chaque fois que j’essayais d’automatiser l’extraction des données contenues dans ces fiches en changeant le numéro de puits, mes outils ou mes scripts ne fonctionnaient jamais. J’obtenais toujours le message d’erreur suivant:

sigpeg-erreur

Je m’étais donc résolu, en 2010, à extraire cette base de données manuellement pour produire la carte publiée dans Le Devoir.

Mais même si le travail était fait, le SIGPEG continuait à m’intriguer: comment faire pour automatiser son extraction? Ce n’est que récemment que j’ai trouvé la solution:

Watir Webdriver!

Alleluia!

Il s’agit d’une bibliothèque qui permet, en Ruby, d’écrire des commandes qui simulent un navigateur web. Par exemple, à partir de la page d’accueil du SIGPEG, si on veut aller dans l’outil de recherche des puits, il faut cliquer sur un bouton appellé «Puits forés». Voici la ligne à écrire pour demander à Watir de le faire:

sigpegAccueil.image(:src, "../images/piv_menu/puits_fores.gif").click

Watir permet en outre de sélectionner des éléments dans des menus déroulants, comme je le fais ici pour sélectionner un numéro de puits dans un menu contenant (presque) tous les puits du SIGPEG:

sigpegAccueil.select_list(:name => "ARG").select noPuits

Watir permet aussi, et c’est sa principale force, d’extraire ce qui se trouve dans une fenêtre surgissante. Il suffit d’utiliser sa méthode use et le tour est joué:

sigpegAccueil.window(:title, "Fiche descriptive").use do

Bref, pourquoi n’es-tu pas entré dans ma vie plus tôt, Watir? Ce qui m’avait pris à l’époque plusieurs mois de copier-coller fastidieux a pu être accompli en quelques soirées de codage et quelques heures d’extraction.

Journalisme ouvert: j’ai placé sur Github le code source du script Ruby qui permet, avec Nokogiri et Watir, d’extraire la version la plus à jour du SIGPEG et de produire un fichier CSV avec les données d’identification de chaque puits. Je travaille sur une version qui glanera plus de données et produira un fichier JSON.

Cette extraction m’a permis de mettre à jour la carte des puits du Devoir. Quand elle a été publiée, il y avait 960 puits dans le SIGPEG. Depuis 2013, 25 puits se sont ajoutés, mais 6 autres puits ont été retranchés, ce qui fait qu’il y a aujourd’hui 979 puits dans le SIGPEG. Mais je n’ai pas retiré les 6 puits retranchés par le ministère de la carte du Devoir, ce qui fait qu’elle contient 985 puits.DZ001

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *