Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

A la découverte de MechanicalSoup

Par Bacary Bruno BODIAN Publié le 08/09/2015 à 11:08:26 Noter cet article:
(0 votes)
Avis favorable du comité de lecture

Python est un langage de programmation regorgeant d'une multitude de modules standards. Ces modules ne nécessitent aucune installation au préalable et permettent différentes utilisations. D'autres par contre tels que numpy requièrent une installation et viennent compléter la panoplie de modules déjà existante. Parmi eux, nous pouvons citer MechanicalSoup qui fera l’objet de ce tutoriel.

Qu'est-ce que MechanicalSoup ?

MechanicalSoup est un module du langage Python simulant la navigation de pages web par un utilisateur quelconque et créant une interaction entre ces derniers. Il permet de parcourir les pages web tout en assurant certains automatismes d'une navigation normale (gestion des cookies, envoi de formulaires, etc).

Installation

Tout comme tout autre module python, l'installation peut se faire soit par l'intermédiaire de "pip" (outil d'installation de packages python), soit directement en exécutant le script "setup.py" situé dans le répertoire du package concerné. Privilégiez plutôt la première méthode qui est la plus recommandée.

A l'aide du script setup.py

Il faudra tout d'abord télécharger le package directement à l'adresse suivante: https://github.com/hickford/MechanicalSoup/archive/master.zip. Ensuite extraire le contenu du fichier et lancer la commande suivante à partir de l'invite de commande: "python chemin_vers_setup.py install", chemin_vers_setup.py désignant le chemin d'accès au fichier setup.py contenu dans l'archive du package MechanicalSoup.

A l'aide de pip

Aller dans l'invite de commande et entrer la commande "chemin_vers_pip install mechanicalsoup", chemin_vers_pip désignant le chemin d'accès à pip. Dans mon cas:

Notre premier programme

NB: Les programmes concernant ce chapitre se feront avec la version 3.3 de python sur Pycharm, un IDE python disponible à l'adresse suivante: https://www.jetbrains.com/pycharm/download/ . L'utilisation de tout autre IDE ou de toute autre version Python à part celles antérieures à la version 3 ne nécessiteront pas (beaucoup) d'ajustements.

Notre premier vous permettra de comprendre les bases de l'utilisation de MechanicalSoup. Nous allons réaliser un bot qui nous permet d'afficher des informations sur le dernier article publié par un étudiant de supinfo à l'url suivante: https://www.supinfo.com/articles/

Le code source du programme effectuant cette tâche est le suivant:

Figure 2: Exemple de programme affichant le dernier article présent à l'URL www.supinfo.com/articles/

Etapes de réalisation

La première instruction sert à importer mechanicalsoup dont nous allons par la suite utiliser quelques-unes de ses fonctionnalités.

La suivante instancie un "objet de type Browser" avec lequel nous effectuerons nos différentes requêtes par la suite.

On donne ensuite à la variable "page_articles" le contexte de la page web que l'on veut parser (parcourir).

Après celà, nous appliquons la "propriété soup" à la variable ayant reçu le contexte de la page web. Cette méthode permet de générer l'arborescence DOM de la page et offre la possibilité de la parcourir grâce à la "méthode select()" qui prend en paramètre un selecteur CSS et qui retourne la partie de l'arborescence concernée. Il faut donc connaitre au maximum l'arborescence de la page parsée afin de la parcourir avec plus de confort.

Enfin, la "propriété text" retourne le contenu texte de la balise selectionnée.

Voilà tout ce qui est à savoir par rapport à ce module sur ce code, le reste n'étant de du python "pur".

Résultat

La figure suivante montre le résultat obtenu:

Figure 3: Sortie du programme de la figure 2.

Plus loin avec MechanicalSoup

Vous avez d’ores et déjà les bases nécessaires pour une utilisation simple de MechanicalSoup. Vous pouvez maintenant réaliser de petits programmes capables de vous afficher par exemple le dernier épisode d'anime paru sur un site dédié, afficher de dernier commentaire de votre post sur un forum, suivre des liens, automatiser certaines tâches en ligne etc.

Imaginez-vous que l'information que vous recherchez ne puissent être accessible qu'en remplissant un certain formulaire sur un site web. Que feriez-vous ? MechanicalSoup apporte une solution à ce problème. Il est possible de donner ou d'altérer les éléments d'un formulaire grâce à lui.

Demonstration

Le second et dernier défi que nous allons tenter de réaliser est de nous logger sur un site web et d'y recueillir notre adresse email qui se trouve dans notre profil. L'adresse du site est la suivante: http://www.france-ioi.org/

Figure 4: Programme se connectant sur un site web via un formulaire

Explication

Les étapes de réalisation de ce programme ne diffèrent de celles de la figure 3 que de quelques éléments basiques.

Ici, une variable formulaire à été créée et sert à stocker le contexte du formulaire que l'on doit modifier. Ensuite à partir de cette variable, les différents champs du formulaire (sLogin = nom d'utilisateur et sPassword = mot de passe) ont été sélectionnés et remplis grâce à "la propriété value" de ces champs (lignes de code 10 et 11). Enfin, le formulaire a été soumis avec la "méthode submit" de "l'objet browser" instancié. Cette méthode prend deux (02) paramètres: le formulaire à soumettre et l'url de base du formulaire. Il ne reste plus qu'à recupérer la valeur du champ email à partir de la balise "input" ayant pour attribut name "sMail" et de l'afficher.

Résultat

Le programme ci-dessus (Figure 4) doit aboutir au résultat suivant:

Figure 5: Resultat du programme de la figure 4.

Conclusion

Simple d'utilisation, MechanicalSoup profite des nombreux avantages du langage Python et permet surtout d'automatiser certaines tâches répétitives que l'on effectue au quotidien sur internet.

Sources

MechanicalSoup

GitHub: https://github.com/hickford/MechanicalSoup

PyPI: https://pypi.python.org/pypi/MechanicalSoup/

Codes sources des programmes

GitHub: https://github.com/bacarybao/Bots_Python

ZIP: https://github.com/bacarybao/Bots_Python/archive/master.zip

Définitions

Objet: sorte de conteneur pouvant comportant des méthodes et des propriétés.

Propriété: variable appartenant à un objet.

Méthode: fonction appartenant à un objet.

Arborescence web: modélisation d'une page web selon le standard DOM.

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels