TP n°2 : Scraping et API Web§

À la fin du TD précédent, nous avons vu comment nous pouvions écrire des programmes qui interrogent les serveurs Web. Nous allons continuer à explorer cette voie, en interrogeant le serveur UniProt.

1

Scraping§

Indice

Le scraping est la pratique qui consiste, pour un programme, à extraire des informations pertinentes à partir du contenu HTML d'une page Web.

Pour ceci, nous allons recourir:

  • à la bibliothèque requests vue lors du précédent TP, pour interroger des serveurs Web, et
  • à la bibliothèque Beautiful Soup pour analyser le code HTML.

Écrivez un programme qui prend en paramètre un identifiant de séquence UniParc (exemple UPI000000001F), et affiche la liste des organismes concernés, avec pour chacune le nombre d'entrées actives (i.e. non obsolètes).

Exemple :

$ python tp2.py UPI000000001F
   4 Vaccinia virus (strain Western Reserve) (VACV) (Vaccinia virus (strain WR))
   2 Vaccinia virus (strain Copenhagen) (VACV)
   3 Vaccinia virus (strain Ankara) (VACV)
   2 Vaccinia virus (strain Tian Tan) (VACV)
  23 Vaccinia virus
   2 Vaccinia virus WAU86/88-1
   1 BAC cloning vector pLC16m8.8S-BAC
   1 synthetic construct

Pour cela, votre programme chargera la page HTML décrivant cette séquence (dans notre exemple https://www.uniprot.org/uniparc/UPI000000001F). Utilisez l'inspecteur HTML de votre navigateur pour étudier la structure du HTML, et en déduire comment extraire l'information pertinente avec Beautiful Soup.

Avertissement

  • La liste d'organismes présente dans le menu de gauche n'est pas pertinente ici, car elle compte également les entrées obsolètes. Vous devez donc extraire l'information du tableau central.
  • Notez que la page HTML par défaut n'affiche pas la totalité des entrées ; que pouvez-vous faire pour rendre votre programme plus robuste ? Avez-vous la garantie à 100% de toujours trouver le bon résultat ?
2

API Web§

Vous pouvez constater que l'extraction d'information à partir de pages HTML est une tâche compliquée et peu fiable. D'autant que, si la mise en page du site vient à changer, il est probable qu'un programme comme celui que vous venez d'écrire ne fonctionne plus.

Pour faciliter l'utilisation de leurs informations par des programmes, de nombreux site fournissent, en plus des pages HTML, des données structurées plus adaptées pour un traitement automatique. On parle alors d'API Web.

Les données d'UniProt sont accessibles à travers plusieurs API Web. Celle que nous allons utiliser est décrite ici. Elle consiste simplement à ajouter une extension à l'URL d'un élément, pour obtenir les informations dans le format correspondant.

Nous allons utiliser l'extension .tab, qui fournit les données du tableau central dans le format TSV (Tab-Separated Values). Dans ce format,

Pour exploiter ce format, vous pourrez utiliser la méthode split, qui permet de découper une chaîne selon n'importe quel caractère :

>>> txt = "bonjour le monde"
>>> txt.split(' ')
['bonjour', 'le', 'monde']
>>> txt.split('o')
['b', 'nj', 'ur le m', 'nde']

Écrivez une nouvelle version du programme précédent, en utilisant le format TSV plutôt que le format HTML.

3