La première application consiste à réaliser un aperçu de cartographie rapide en se basant sur les 500 sites disponibles dans la partie “top sites” de l’interface web. L’idée derrière ce premier prototype d’application est d’utiliser la période d’essais de 7 jours d’Alexa pour capitaliser le maximum de données et les mettre en image.
Comme le but de la TX est de réaliser une carte similaire mais à jour de la internet-map, il faut particulièrement se concentrer sur les Downstream et Upstream links qui sont, pour rappel, les liens entre les nœuds du graphe.
Pour capitaliser ces données disponibles directement sur l’interface web et éviter de le faire à la main par “copier/coller”, il est nécessaire de réaliser un programme qui le fera à notre place : un crawler.
Plusieurs solutions sont disponible dont les deux plus courantes : le framework CasperJS] (ou [[http://phantomjs.org/|PhantomJS) qui est un navigateur webkit headless entièrement scriptable, ou l’alternative plus récente Puppeteer, une solution de contrôle d’un navigateur Chromium/Chrome. En revanche, dans notre cas, étant donnée la simplicité des pages web du site Alexa, l’utilisation d’une extension de navigateur telle que Web Scraper permet de simplifier les choses et d’arriver à un premier résultat rapidement en fonctionnant sur le même principe que Puppeteer.
Web Scraper est directement disponible dans la console développeur après son installation (touche F12). Son utilisation est particulièrement simple : On donne une URL de départ, puis on sélectionne des objets, des liens, des morceaux de texte, etc… que l’on souhaite récupérer. Le plus simple est d’utiliser l’outil de sélection interactive disponible au sein de Web Scraper.
La configuration finale pour réaliser le scrap de données identiques à celles présentées sur cette page est disponible sur ce repo Gitlab sous le nom de “sitemap.txt” (représenté graphiquement ci-contre). Il suffit de l’importer par copier-coller dans l’interface de web scraper sous l’onglet “Import Template”. Lors du lancement du scrap, une page web s’ouvre et le logiciel s’occupe de contrôler le navigateur : il faut environ 5-10 minutes au programme, configuré avec le script donné précédemment, pour récupérer à travers les 20 pages du top (pagination par récurrence), les données des 500 sites présents, puis pour chacun d’eux, récupérer les 10 sites upstream et les 10 sites downstream. A la fin, un fichier CSV est disponible avec toutes les données.
Attention cependant, car l’utilisation de l’extension Web Scraper ne permet pas de filtrer les données récupérées et le CSV obtenu n’est pas parfait. En effet, plusieurs problèmes apparaissent :
Pour réaliser la cartographie avec le logiciel Gephi, il faut tout d’abord en comprendre son utilisation. En effet, il y a deux manières d’importer les données au sein du logiciel :
Lors de la réalisation de l’application, j’ai choisi la seconde option car relativement simple à mettre en place et plus permissive si je souhaite par la suite créer un graphe “temps réèl” afin de voir le trajet du crawler de façon dynamique. De plus, étant donné qu’un bout de code doit être écrit pour parser le fichier CSV disponible avec les données d’Alexa, il ne m’étais pas très difficile d’ajouter un morceau pour streamer le graphe dans le logiciel Gephi.
Le partie de programme qui parse et stream les données à Gephi a été écrit en JavaScript afin de tourner avec le moteur NodeJS. L’algorithme se déroule en plusieurs étapes :
Après le stream, on se retrouve avec un graphe basique noir et blanc (visible sur l’image ci-contre) , spatialisé de manière aléatoire, comprenant pour un scrap le 20/02/2018, un ensemble de 1290 nœuds et 9463 liens. C’est un graphe relativement petit pour Gephi qu’il est très facile de manipuler sans pour autant nécessiter des ressources de calcul faramineuses.
L’exploitation du graphe peut se faire à cette étape, mais vue les données importées, il est nécessaire de les filtrer et les caster dans leurs types respectifs adaptés afin d’avoir un graphe plus propre. Cependant, cette étape permet de donner un bon aperçu de ce qu’il est possible d’obtenir.