dimanche 20 avril 2008
Ruby - RSS - Hpricot + data mining : all your base are belong to us !
Par lucas, dimanche 20 avril 2008 à 22:19 :: General
C'est ce que je me suis écrié lorsque j'ai touché à Hpricot.
Somebody set up us the bomb
Si vous ne connaissez pas Hpricot, c'est le moment ou jamais d'apprendre à l'utiliser. Pour la petite introduction, Hpricot est une extension Ruby qui permet de facilement et avec des performances plus que correctes, d'extraire et modifier les données des pages web. Hpricot supporte en partie plus que suffisante le X-Path et le CSS-Path. Et, comme je l'ai déjà dit, et je le répète donc, c'est en Ruby, donc très naturel.
En outre, Hpricot sait plutôt bien se débrouiller avec des sites mal codés, et non respectueux des standards du web. Bref, Hpricot est l'outil idéal pour un explorateur du web sour Ruby.
We get the signal
Le premier intérêt d'Hpricot est de pouvoir extraire des données d'un site pour, par exemple, les afficher sur un autre. Une fois qu'on connais la structure du site, on peut donc lui tirer les bouts qui nous plaisent, par exemple, pour afficher tous les titres des fils de discussions d'un forum phpBB du site A, tous les titres de blogs du site B et d'en faire un mélange à sa sauce. Ça ne reste pas toujours très sympa d'extirper juste les données d'un site sans lui renvoyer de traffic, mais Hpricot ne fait pas que le mal. Il permet par exemple de facilement créer un robot d'exploration du web en suivant tous les liens d'une page. Il pourrait permettre d'effectuer simplement des remplacements de liens inutiles, de classes CSS etc. afin par exemple, de faciliter l'accès au web pour des personnes avec des handycap (j'imagine le cas où une liste de 30liens est présente avant que le contenu ne soit facilement ateignable).
Main screen turn on
Passons sur Hpricot, nous y reviendront. Reparlons de Ruby, et n'oublions pas que fourni de base se trouve le module RSS. Celui-ci, comme Hpricot, permet de simplement lire des flux RSS et de raisonner non pas en xml mais en beaux concepts haut-niveau. Comme un RSS contient généralement des liens vers des pages web, et que, réciproquement, les pages web contiennent souvent des liens vers des flux RSS, on peut sans trop d'effort dire que Hpricot et RSS permettent de glaner simplement des tas d'information.
It's you !!
Prenons un exemple pratique. Si nous voulons avoir accès rapidement aux dernieres machinations machiavéliques de nos députés. Le site de l'Assemblée Nationale propose un intéressant flux RSS : http://www.assemblee-nationale.fr/rss/rss.xml. On peut donc facilement le parser avec Ruby. Puis, ouvrir les liens avec Hpricot et en ayant au préalable remarqué que les contenus intéressants sont au chemin Xpath /html/body/div[i]//p avec i prenant une valeur qui varie selon les pages, et tout le reste dans des balises paragraphes (je ne ferai pas de commentaire sur la propreté d'un tel code).
How are you gentlemen!! All your base are belong to us. You are on the way to destruction.
On n'a plus qu'a analyser le contenu de ses pages, pour tenter de déterminer les sujets chauds, quels député oeuvre dans quels domaines, quel est le langage à la mode (je passerai sur et vous laisserai trouver ce qu'est la fléxicurité) chez les faiseurs de loi. Ça permettrai de savoir si nos députés ont des tendances sécuritaires paranoïaques, peut-être de déceler les sujets chauds. Mais pour ça, je pense que la quantité de données sur le RSS seulement risque d'être pas assez, il faudrait passer un coup d'Hpricot sur toutes les archives pour récupérer tous les anciens débats, ce pourrait être intéressant de voir comment les mots des lois évoluent.
You have no chance to survive make your time. Ha Ha Ha Ha
Il ne me reste plus qu'à trouver les bons modules restants, ou les coder si besoin pour mettre en place un outil de surveillance des faits-et-gestes de nos zélites. Sans forcément rendre une base de donnée publique, pour pas s'embêter trop avec la CNIL, faire que chacun puissse se faire la sienne.
For great justice !
Du coup, si vous voulez faire un truc de ce genre avec ouam, proposez vous, moi j'ai déjà Take off my Zig.