Extraction de données à partir d'une page web avec Python

Le but de l'exercice était d'extraire le contenu textuel d'une page web, puis d'en tirer des statistiques, et le tout en utilisant un script Python.

Notre travail s'est articulé en cinq grandes étapes :

  • Récupération du code source de la page web
  • Nettoyage de ce code
  • Création d'un fichier contenant le code source nettoyé
  • Opérations de décompte sur le texte
  • Génération d'un fichier de résultat contenant ces statistiques
Pour télécharger le script entier...

Objectif : Récupérer le code source d'une page web !

On commence donc par créer une liaison avec la page web choisie, afin de pouvoir extraire son code source.

Pour se faire, on utilise la fonction import. En effet, Python ne sait pas traiter avec les url en natif, on doit donc importer un module qui lui permettra de le faire.

On importe également un module lui permettant d'utiliser les expressions régulières dont on aura besoin plus tard.

Ensuite "ouvre une connection" avec cet url grace à la fonction urlopen et on affecte cette connection à la variable qu'on nomme - vous l'aurez deviné - url.

On aimerait maintenant imprimer ce que contient cet url dans un fichier texte.

Voilà comment on procède :

Bien. Nous avons maintenant un superbe fichier texte absolument illisible et complètement inadéquat pour faire des statistiques.

Juste ici !

C'est l'heure du grand nettoyage !

Il va donc maintenant falloir qu'on dégage de cet amas HTMLique le matériel textuel linguistique qui nous intéresse. Grande affaire.

Tout est détaillé ci-dessous :

  • Comment on s'est servi d'une seule et unique fonction des expressions régulières pour remplacer les balises html par du vide...
  • ...puis remplacer les autres caractères spéciaux html par leur valeur textuelle...
  • ...puis se débarasser des groupes de caractères non linguistiques...
  • ...puis effacer les lignes de code sans balises...
  • ...et enfin retirer tabulations et doubles espaces.

Création du fichier texte nettoyé ! ...Ah bah non en fait.

On pourrait se dire que ça y est, la page est nettoyée, on va pouvoir travailler dessus ! Que nenni.

Certes un peu moins qu'avant, mais la page est toujours moche et impropre à la consom... à l'analyse.

Voyez vous-même...

Bon. Comment faire mieux ? En supprimant les lignes vides, par exemple. Outils ? La fonction sub et les expressions régulières... Pour changer.

Après ça, notre page contient toujours des gros blocs textuels, mais ne correspondant pas au texte à analyser. Probablement des subtilités du codage.

On a pas envie de faire dans la dentelle, alors on supprime carrément les blocs de lignes gênantes de la liste de lignes créée plus tôt.

Enfin, puisqu'on on veut un fichier résultat contenant du texte, on doit redonner à ce qui est pour l'instant une liste de lignes un caractère textuel.

Vous noterez à la fin qu'on donne bien naissance à un fichier texte qu'on appelle pagewebclean2. Oui, en heureux parents, on s'est creusé la tête pour trouver un nom original.

Voilà le bébé.

Un mot, des mots. Un compte, décomptes...

On arrive dans la partie la plus intéressante de l'exercice, mais également dans celle qui a mystérieusement posé le plus de problème. J'ai nommé : L'analyse !

Pourquoi intéressante ? Parce que c'est là qu'on va vraiment pouvoir utiliser les fonctions des expressions régulières. Oui, parce que sub, c'est bien, mais ça fait pas tout. CQFD

On commence doucement par ouvrir un nouveau fichier qu'on appelle infostat.

Jusque là, tout va bien. On en profite pour indiquer le nombre de caractère du texte vie la fonction len qui donne la longueur d'une chaine de caractères (en l'occurence).

On va maintenant faire le décompte des phrases, ou plutôt créer une liste des phrases.

On utilise pour cela la fonction split qui va transformer une chaine de caractère (le texte) en liste d'éléments. La césure se fait au niveau de chaque occurence du motif choisi, ici le point.

Et pour faire le décompte des mots ? Rien de plus simple (en apparence):

On va maintenant s'atteler à la création d'un dictionnaire.

Pour cela, on a besoin de :

  • Se débarasser des problèmes de casse. Parce que c'est casse-pieds. Ha ha ha.
  • Générer la liste des mots du texte, sans doublons.
  • Résoudre les problèmes d'encodage. Mais pourquoi Python utilise-il ASCII par défaut ?

On continuera notre projet de dictionnaire plus loin.

Pour l'instant, on procède à quelques comptes et décomptes, comme la longueur moyenne d'une phrase ou d'un mot...

...puis on écrit tout les résultats obtenus jusque là dans le fichier résultat de statistiques.

On revient maintenant à notre idée de dictionnaire.

Tout d'abord on le crée.

Ensuite, on associe chaque terme à sa fréquence d'apparition.

Explications juste en dessous :

Allez, une petite info gratuite parce que c'était Noël :

Et voilà le résultat final !

Histoire de ne pas oublier le plus important, on donne à la fin tous les mots apparaissant dans le texte, associés à leur nombre d'apparitions.

Et voilà ! Et maintenant un petit jeu pour finir en beauté : Le mot qui apparait le plus souvent est ?

Réponse ici.