Analyser un historique de navigation web
Bibliothèques HTML et HTTP haut niveau
1. La bibliothèque requests
a. Présentation
Le package requests est une bibliothèque Python, distribuée sous licence Apache 2, qui permet d’effectuer des requêtes HTTP de manière confortable. L’unique version de HTTP supportée pour le moment est HTTP/1.1, qui est la plus largement utilisée. Il permet aussi d’utiliser SSL avec HTTPS, la version chiffrée de HTTP, de manière transparente.
HTTP (Hypertext Transfer Protocol : protocole de transfert d’hypertexte) est l’un des protocoles les plus utilisés d’Internet. C’est un protocole textuel (par opposition à binaire) qui permet l’envoi et la récupération de ressources depuis un serveur distant. Les échanges se font à partir de requêtes du client vers le serveur. Les requêtes sont composées de différents éléments. Au minimum une méthode, une URL et une version de HTTP. D’autres données peuvent être envoyées lors d’une requête, par exemple le nom de domaine ayant servi à contacter le serveur (permettant d’identifier un « site » par un nom de domaine et non par une adresse IP uniquement). De nombreuses informations supplémentaires sont regroupées dans ce qui constitue l’en-tête (header) de la requête. Notamment les cookies, des données stockées côté client et mises à jour par les réponses du serveur, le champ referer contenant l’URL qui a provoqué la requête, le champ user-agent dans lequel le programme client décline son identité (nom du programme + numéro de version), l’encodage de caractère, etc.
Les standards du web sont supervisés et publiés par le W3C (World Wide Web Consortium). Son rôle est d’instaurer des normes afin de garantir une compatibilité des technologies web. Sur leur site, il est possible de retrouver tous ces standards (voir section Hyperliens).
Le protocole définit un ensemble de méthodes associées, par convention, à un certain type d’action. Voici la liste des plus courantes :
-
GET : qui demande une ressource identifiée par l’URL de la requête....
Les bases de données SQLite3
1. SGBD et SQL
a. Les Systèmes de Gestion de Base de Données
Une des interfaces proposées par Python pour interagir avec les systèmes de fichiers a été vue plus tôt dans ce livre. L’utilisation de fichiers présente de nombreux avantages (pour « soulager » la mémoire vive, pour l’archivage, etc.), mais pose très vite un ensemble de problèmes conséquents.
La problématique du remplacement d’un caractère dans un fichier texte UTF-8 a été rapidement abordée dans le chapitre Bibliothèque standard. Cet exemple laisse imaginer la quantité de questions et de problèmes que soulèvent les fichiers. C’est une des raisons au nombre de formats, codecs, bibliothèques, logiciels, etc. dédiés à des utilisations spécifiques des fonctionnalités de stockage de l’information.
Les Systèmes de Gestion de Bases de Données (SGBD) sont conçus pour stocker des données de plus en plus complexes et de plus en plus nombreuses. Par besoin d’efficacité, ils se sont diversifiés et orientés vers certains types de données ou d’utilisations.
Dans ce livre, le seul SGBD qui sera présenté, est une base de données SQL, du nom du langage utilisé pour l’interroger.
b. Structured Query Langage (Langage de requête structurée)
SQL est dédié à l’interrogation de base de données dîtes relationnelles : les données sont stockées dans des tableaux (tables en anglais) dont chaque ligne (row) est identifiée par la valeur d’une ou plusieurs colonnes (column). Une colonne peut être définie comme contenant des valeurs faisant référence aux identifiants d’une autre table (foreign key).
Les bases de données dites SQL définissent avec précision les données destinées à y être stockées : une table dispose d’un nombre bien déterminé de colonnes dont le type, la taille, etc. sont connus.
Les SGBD mettent en place toute une série de mécanismes destinés à optimiser différents types d’opérations selon...
Accéder à l’historique d’un navigateur
1. L’historique des navigateurs les plus utilisés
a. Introduction
Le code, la documentation, etc. de SQlite3 appartiennent au domaine public. C’est l’une des raisons pour lesquelles il est présent dans de nombreuses applications, propriétaires ou non. Il est notamment utilisé pour stocker l’historique de navigation par la plupart des navigateurs web. C’est une solution adaptée, permettant de stocker des données structurées dans un seul fichier (sans besoin de logiciel serveur, etc.).
L’exemple présente les différentes étapes relatives à l’écriture d’un module d’accès aux historiques de navigateurs web. Supportant différents formats de base de données, elle sera utilisée pour récupérer le contenu HTTP associé et en extraire sommairement du contenu avec BeautifulSoup. Il convient de préciser que les navigateurs pris en exemple dans cette section ne constituent en rien une liste exhaustive. Les structures, formats, chemins, etc. de stockage des historiques sont cités à titre indicatif et dépendent de la version du système d’exploitation et de celle du navigateur (voire des configurations de l’utilisateur).
C’est pour cette raison que l’exemple permet, en plus d’illustrer l’utilisation des bibliothèques présentées dans ce chapitre, de donner des pistes sur l’écriture de programmes extensibles.
b. Mozilla Firefox
Chemin d’accès au fichier
Mozilla Firefox propose une gestion de profils pour un utilisateur unique. Par défaut, un profil avec un nom aléatoire est créé, son dossier porte généralement l’extension « .default ». Ce(s) dossier(s) contien(nen)t toutes les informations relatives à ceux-ci, dont l’historique de navigation, dans une base de données SQlite3, dans le fichier « places.sqlite ».
Il existe différentes distributions de Firefox, ainsi que des versions modifiées (comme GNU IceCat ou SeaMonkey par exemple). Les données utilisateurs sont stockées dans des dossiers portant le nom du navigateur.
Liste de bases de données d’historique...