1. médialab Sciences Po
  2. Actualités
  3. Comment scraper et crawler son propre site pour le migrer

Comment scraper et crawler son propre site pour le migrer

Le web mining au secours d'un projet de refonte de site web

Chronique

Re-faire un site web [voir la chronique précédente] nécessite une étape importante et complexe : migrer les contenus. Il s'agit de récupérer les contenus du précédent système pour les intégrer dans le nouveau.

Afin de ne pas casser le web il faut aussi mettre en place un système de redirections réorientant les anciennes URLs vers les nouvelles car la plupart du temps la syntaxe change.

Scraper ou ouvrir la boîte noire du CMS ?

Notre ancien site était construit sur l'application Wordpress initialement prévue pour construire des blogs. Nous avions ajouté divers plugins dont un qui permettait de créer des types de post différents et de les lier les uns aux autres. 

Les données étaient stockées dans une base MySQL dont le schéma était modifié par l'usage des plugins. Aussi pour récupérer les données, nous pouvions chercher un format d'export qui soit compatible avec nos plugins ou extraire depuis la base de données en interprétant le schéma SQL. Deux perspectives peu enthousiasmantes car elles demandent de chercher à comprendre comment la plateforme Wordpress et les plugins fonctionnent en détails.

Or faire l'effort de comprendre les modèles de données d'une plateforme que l'on va abandonner n'est pas ce qu'il y a de plus motivant. Benjamin Ooghe-Tabanou a alors fait une proposition basée sur son expertise : « et si on scrapait l'admin du Wordpress ? »

Liste des posts de type Blog dans Wordpress
Liste des posts de type Blog dans Wordpress
Détails d'un post de type Blog dans Wordpress
Détails d'un post de type Blog dans Wordpress

En effet, l'admin que nous connaissons bien pour l'utiliser régulièrement contient toutes les informations que nous souhaitions récupérer et ce dans un format certes non prévu pour l'export mais néanmoins bien structuré. Justement Jules Farjas, notre stagiaire ingénieur de l'époque, avait besoin de se former aux techniques de scraping.

Grâce à lui, nous avons pu bénéficier d'un script en Python qui extrait les contenus nous intéressant en scrapant l'interface d'administration de notre site Wordpress. Plutôt que d'apprendre l'usage d'une API (Application Programming Interface) on utilise l'interface utilisateur que l'on connaît. En ce sens, un scraper peut être considéré comme une UPI (User Programming Interface).

Ces exports aux format json ont ensuite été traités par un autre script d'import en JavaScript transformant ces données dans le format du nouveau modèle de données. Lors de cette étape, nous avons bien pris soin d'indiquer dans le nouveau modèle de données le nom de la page (slug) utilisé par l'ancien site Wordpress.

Ainsi les informations de redirection sont conservées dans le modèle de données, et un simple script permet de générer la configuration des redirections dans le formalisme du nouveau serveur web.

À ce stade nous avons inséré nos anciennes données et nous avons une table de redirections : tout va bien dans le meilleur des mondes. En théorie. D'expérience, en matière de manipulation de données, la distance entre théorie et réalité est souvent importante. Aussi fallait-il trouver une solution pour tester nos redirections. Et cela à la veille de la mise en production comme il se doit...

Crawler pour tester les redirections

Pour ce faire, nous avons de nouveau pensé à nos outils de webmining.

Hyphe, notre crawler web, nous a tout d'abord permis de crawler l'ancien site, c'est à dire de visiter automatiquement toutes ses pages.

Une fois cela fait, on peut facilement récupérer la liste des URLs des pages découvertes.

Liste des pages de la web entité medialab.sciencespo.fr dans Hyphe
Liste des pages de la web entité medialab.sciencespo.fr dans Hyphe

Nous pouvons maintenant tester si ces "anciennes" URLs sont correctement redirigées.

Pour automatiser ce test, nous avons modifié la liste des URLs des pages de l'ancien site pour y remplacer le domaine par celui où notre futur site est temporairement hébergé (ce qui revient à simuler la mise en production du site).

Après avoir configuré les redirections pour ce domaine de test nous avons ensuite utilisé l'outil de webmining minet développé par Guillaume Plique pour générer une requête HTTP GET pour chaque URL présente dans la liste.

minet fetch --throttle 0.5 url old-pages-URLs.csv > old-pages-test-results.csv

Minet génère toutes les requêtes et retourne un rapport qui contient notamment le statut de la réponse HTTP et d'éventuelles erreurs.

rapport des requêtes HTTP générées par minet au format CSV
rapport des requêtes HTTP générées par minet au format CSV

En regardant toutes les pages pour lesquelles il y a soit un statut HTTP différent de 200, soit une erreur, nous découvrons l'ensemble des redirections qui ont échoué.

Cela nous a permis de corriger des erreurs de syntaxe dans la création des redirections et de découvrir des pages qui avaient échappé à notre système de récupération de contenu car ayant un statut particulier dans le système Wordpress.

L'automatisation de ce test des redirections nous a permis de rapidement converger vers la résolution d'un maximum de pages possibles.

Il restera néanmoins quelques impasses car certains contenus n'ont pas été portés, mais nous avons pu contrôler que ce qui devait être redirigé l'avait bien été.

N'essayez pas cela chez vous !

Voilà comment des méthodes de webmining conçues pour mener des enquêtes nous ont aidé à construire notre nouvelle identité sur le web.

Nous souhaitions partager notre expérience pour montrer comment des outils peuvent être détournés de leur usage premier, y compris, voire surtout, par leurs concepteurs.

Ces méthodes montrent par ailleurs à quel point nos expériences d'enquête sur les terrains du web influent nos pratiques au quotidien. 

Pour autant, cela ne doit pas être considéré comme une bonne pratique. C'est juste pratique ! :)