Didacticiel :
Automatiser la récupération de données biologiques : version avancée

Dans cette version avancée, nous allons nous intéresser à une autre manière de récupérer des données depuis un site internet : via l'utilisation de formulaires.

Les formulaires, ce sont ces pages avec plein de champs à remplir et que vous soumettez ensuite pour vous créer un compte, contacter votre hotline ou que sais-je. Leur utilisation permet de contourner une limitation importante de la soumission d'informations via des adresses internet (ou URL pour "Uniform Resource Locator") : le volume de données (au fait, saviez-vous qu'un Geek ne crie pas, mais qu'il URL? ;-)). En théorie, une adresse internet n'est pas limitée en taille (voir la section 3.2.1 de la RFC 2616). En réalité pourtant, les logiciels clients (Firefox, Google Chrome,...) et serveurs (Apache et autres) imposent des limitations. Si vous souhaitez juste récupérer la séquence d'un gène en soumettant son identifiant Genbank, ce problème ne vous concernera pas et les adresses internet seront le moyen le plus facile et rapide pour construire votre requête. Si par contre vous souhaitez soumettre l'ensemble des gènes d'un organisme pour caractériser ceux présentant un motif de régulation particulier, ça va coincer.

Utilisons donc les formulaires... Et là c'est le drame! ;-). Même avec une documentation minimaliste, voire inexistante, l'envoi d'informations via une adresse internet peut se décrypter facilement en regardant tout simplement la structure de cette adresse dans la barre de votre navigateur (par exemple cette requête au NCBI est facilement compréhensible). Il n'y a plus qu'à bidouiller cette adresse et à la donner à une commande comme wget ou à l'inclure dans un script Python. Malheureusement, et en général, les formulaires sont très mal documentés quant à la manière de les soumettre de manière automatique via une commande ou un script. Une fois soumis, rien d'explicite n'apparaît dans la barre d'adresse du navigateur. Comment alors identifier le nom des paramètres à envoyer pour exprimer notre requête? C'est ce que je vais vous détailler maintenant.

Un exemple concret : le service BLASTN de la Saccharomyces Genome Database

Voici mon projet. J'ai une liste de séquences de gènes et je voudrais caractériser de manière automatique les orthologues chez certaines espèces de champignons en utilisant l'outil en ligne BLASTN de la Saccharomyces Genome Database (ou SGD). Afin d'illustrer la démarche, nous prendrons comme exemple le gène ARP2. En cliquant sur le lien "BLASTN vs Fungi" dans la section "Analyze Sequence" de la fiche SGD de ce gène, on atterrit sur ce formulaire.  Le seul paramètre que je souhaite modifier est la liste des espèces. Pour cela, je clique sur "-----Candida-------" :

blastn

Si je clique maintenant sur le bouton "Run WU-BLAST", je vais être mis en attente jusqu'au moment de récupérer le résultat de mon BLAST dans un nouvel onglet de mon navigateur. En regardant l'adresse internet dans cette nouvelle fenêtre, je suis très déçu de trouver uniquement "http://sgd-beta.stanford.edu/blast-fungal?program=blastn". Excepté le nom du programme blastn, aucun autre paramétrage n'est accessible. Comment alors préciser ma séquence et mes espèces ?

Une première manière de faire est de chercher le nom de ces paramètres dans le code source de la page du formulaire. Disons le tout de suite, la complexité des sites internet moderne rend cette tâche assez laborieuse et souvent infructueuse. L'autre option consiste à intercepter et visualiser les données envoyées. Dit comme cela, cela semble très technique. En fait pas du tout, grâce aux outils de développement fournis de base par chaque navigateur internet (Firefox, Safari, Chrome,...). A noter qu'il existe également des alternatives plus ambitieuses qui s'installent sous forme d'extensions dans votre navigateur. Par exemple l'excellent Firebug pour Firefox. Je prendrai ici l'exemple du navigateur Google Chrome.

Ô grand Navigateur, montre moi ce que tu envoies dans mon dos!!

Depuis Google Chrome, ouvrons à nouveau ce formulaire. Je sélectionne mes espèces Candida et je clique une première fois sur le bouton "Run WU-BLAST". Un nouvel onglet s'ouvre avec la page qui affiche mon résultat de BLASTN. En étant dans cet onglet, j'affiche les outils de développement (Afficher -> Options pour les développeurs -> Outils de Développement). Et je sélectionne l'onglet "Network" qui est bien vide pour l'instant.

blastn_2

Je retourne dans l'onglet du formulaire et je soumets à nouveau ma requête. Dans l'onglet avec le résultat du BLASTN, je constate maintenant que mon navigateur a gardé la trace de plusieurs d'échanges avec le serveur de la SGD. En particulier, je trouve un fichier portant le nom de run_blast (et qui semble avoir le temps d'échange le plus important)  :

blastn_3

 

En cliquant sur ce fichier, je trouve dans la section "Form Data"  le détail des paramètres envoyés par ma requête  (ô joie!) :

blastn_4

 

J'ai donc tout ce qu'il me faut pour soumettre maintenant ma requête via un script en Python, et je peux le faire pour autant de séquences qu'il me plaît (na!).

Automatisation du processus au moyen du langage Python

Voici donc un petit bout de code qui me permet d'automatiser le processus. La seule subtilité est d'utiliser les librairies urllib et urllib2 fournies avec une distribution Python de base :

Et voilà! La page internet contenant le résultat du BLASTN pour chaque séquence est contenue dans la variable nommée "response". Il ne reste plus qu'à "fouiller" dans cette page avec, par exemple, la librairie Beautiful soup pour extraire ce qui m'intéresse. Bon appétit!

Un grand pouvoir implique de grandes responsabilités.

Soumettre votre requête de cette manière est totalement identique à la soumettre via le formulaire en ligne. La différence est que vous pouvez maintenant envoyer un grand nombre de requêtes très rapidement. Soyez donc prudent, car vous pouvez ainsi monopoliser le serveur au détriment des autres utilisateurs. Vos requêtes pourraient ainsi être assimilées à une forme d'attaque de déni de service. Certaines personnes n'apprécient pas et sont alors tentées de vous bannir de quelques heures à plusieurs jours pour l'accès à leur site internet.

Pour finir, je tiens à remercier mes relecteurs : Akira, Zazo0o et williamW.

  • À propos de
  • J'ai débuté mon parcours de chercheur par un doctorat en biologie moléculaire et cellulaire à l'Université de Strasbourg. Mon sujet portait sur l'étude structurale de l'ARN génomique du VIH au moyen d'approches "mouillées". Au cours de ce doctorat, je me suis passionné pour l'approche bioinformatique. A la suite d'un DESS de double-compétence en informatique, j'ai été recruté en tant que Maître de Conférences en 2002 dans cette même Université. Spécialisé dans l'étude des relations structure-fonction des ARN non-codants, j'ai développé l'outil Assemble2 (http://www.bioinformatics.org/assemble/index.html). Cet outil a permis la construction et l'étude de plusieurs architectures d'ARN dont les premiers ribosomes eucaryotiques (levure, germe de blé, Trypanosome,...). Mon activité se divise aujourd'hui entre le support bioinformatique pour des projets collaboratifs et la responsabilité d'une équipe. Au sein de cette équipe, nous développons des outils expérimentaux et bioinformatiques pour comprendre le processus d'infection de la levure pathogène Candida glabrata. Nos approches comprennent notamment l'ingénierie de génome par CRISPR-Cas9, le dual RNA-Seq hôte-pathogène, l'annotation de génomes et la reconstruction de réseaux biologiques.

Catégorie: Didacticiel | Tags: , , ,

Un commentaire sur “Automatiser la récupération de données biologiques : version avancée

  1. Salut,

    Pour compléter l\'article, il est aussi possible de faire ces requêtes en biopython :

    http://biopython.org/DIST/docs/api/Bio.Entrez-module.html

    Ou encore utiliser les outils en ligne de l\'EBI :

    http://www.ebi.ac.uk/Tools/webservices/services/dbfetch

    Tout n\'est peut-être pas aussi détaillé que dans cet article, mais ces outils sont souvent oubliés et/ou ignorés, donc une petite piqûre de rappel aide 🙂

    Bravo pour l\'article !

Laisser un commentaire