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

Dans cette ver­sion avan­cée, nous allons nous inté­res­ser à une autre manière de récu­pé­rer des don­nées depuis un site inter­net : via l'utilisation de for­mu­laires.

Les for­mu­laires, ce sont ces pages avec plein de champs à rem­plir et que vous sou­met­tez ensuite pour vous créer un compte, contac­ter votre hot­line ou que sais-je. Leur uti­li­sa­tion per­met de contour­ner une limi­ta­tion impor­tante de la sou­mis­sion d'informations via des adresses inter­net (ou URL pour "Uni­form Resource Loca­tor") : le volume de don­nées (au fait, saviez-vous qu'un Geek ne crie pas, mais qu'il URL ? ;-)). En théo­rie, une adresse inter­net n'est pas limi­tée en taille (voir la sec­tion 3.2.1 de la RFC 2616). En réa­li­té pour­tant, les logi­ciels clients (Fire­fox, Google Chrome,…) et ser­veurs (Apache et autres) imposent des limi­ta­tions. Si vous sou­hai­tez juste récu­pé­rer la séquence d'un gène en sou­met­tant son iden­ti­fiant Gen­bank, ce pro­blème ne vous concer­ne­ra pas et les adresses inter­net seront le moyen le plus facile et rapide pour construire votre requête. Si par contre vous sou­hai­tez sou­mettre l'ensemble des gènes d'un orga­nisme pour carac­té­ri­ser ceux pré­sen­tant un motif de régu­la­tion par­ti­cu­lier, ça va coin­cer.

Uti­li­sons donc les for­mu­laires… Et là c'est le drame ! ;-). Même avec une docu­men­ta­tion mini­ma­liste, voire inexis­tante, l'envoi d'informations via une adresse inter­net peut se décryp­ter faci­le­ment en regar­dant tout sim­ple­ment la struc­ture de cette adresse dans la barre de votre navi­ga­teur (par exemple cette requête au NCBI est faci­le­ment com­pré­hen­sible). Il n'y a plus qu'à bidouiller cette adresse et à la don­ner à une com­mande comme wget ou à l'inclure dans un script Python. Mal­heu­reu­se­ment, et en géné­ral, les for­mu­laires sont très mal docu­men­tés quant à la manière de les sou­mettre de manière auto­ma­tique via une com­mande ou un script. Une fois sou­mis, rien d'explicite n'apparaît dans la barre d'adresse du navi­ga­teur. Com­ment alors iden­ti­fier le nom des para­mètres à envoyer pour expri­mer notre requête ? C'est ce que je vais vous détailler main­te­nant.

Un exemple concret : le ser­vice BLASTN de la Sac­cha­ro­myces Genome Data­base

Voi­ci mon pro­jet. J'ai une liste de séquences de gènes et je vou­drais carac­té­ri­ser de manière auto­ma­tique les ortho­logues chez cer­taines espèces de cham­pi­gnons en uti­li­sant l'outil en ligne BLASTN de la Sac­cha­ro­myces Genome Data­base (ou SGD). Afin d'illustrer la démarche, nous pren­drons comme exemple le gène ARP2. En cli­quant sur le lien "BLASTN vs Fun­gi" dans la sec­tion "Ana­lyze Sequence" de la fiche SGD de ce gène, on atter­rit sur ce for­mu­laire.  Le seul para­mètre que je sou­haite modi­fier est la liste des espèces. Pour cela, je clique sur "—–Can­di­da——-" :

blastn

Si je clique main­te­nant sur le bou­ton "Run WU-BLAST", je vais être mis en attente jusqu'au moment de récu­pé­rer le résul­tat de mon BLAST dans un nou­vel onglet de mon navi­ga­teur. En regar­dant l'adresse inter­net dans cette nou­velle fenêtre, je suis très déçu de trou­ver uni­que­ment "http://​sgd​-beta​.stan​ford​.edu/​b​l​a​s​t​-​f​u​n​g​a​l​?​p​r​o​g​r​a​m​=​b​l​a​stn". Excep­té le nom du pro­gramme blastn, aucun autre para­mé­trage n'est acces­sible. Com­ment alors pré­ci­ser ma séquence et mes espèces ?

Une pre­mière manière de faire est de cher­cher le nom de ces para­mètres dans le code source de la page du for­mu­laire. Disons le tout de suite, la com­plexi­té des sites inter­net moderne rend cette tâche assez labo­rieuse et sou­vent infruc­tueuse. L'autre option consiste à inter­cep­ter et visua­li­ser les don­nées envoyées. Dit comme cela, cela semble très tech­nique. En fait pas du tout, grâce aux outils de déve­lop­pe­ment four­nis de base par chaque navi­ga­teur inter­net (Fire­fox, Safa­ri, Chrome,…). A noter qu'il existe éga­le­ment des alter­na­tives plus ambi­tieuses qui s'installent sous forme d'extensions dans votre navi­ga­teur. Par exemple l'excellent Fire­bug pour Fire­fox. Je pren­drai ici l'exemple du navi­ga­teur Google Chrome.

Ô grand Navi­ga­teur, montre moi ce que tu envoies dans mon dos!!

Depuis Google Chrome, ouvrons à nou­veau ce for­mu­laire. Je sélec­tionne mes espèces Can­di­da et je clique une pre­mière fois sur le bou­ton "Run WU-BLAST". Un nou­vel onglet s'ouvre avec la page qui affiche mon résul­tat de BLASTN. En étant dans cet onglet, j'affiche les outils de déve­lop­pe­ment (Affi­cher -> Options pour les déve­lop­peurs -> Outils de Déve­lop­pe­ment). Et je sélec­tionne l'onglet "Net­work" qui est bien vide pour l'instant.

blastn_2

Je retourne dans l'onglet du for­mu­laire et je sou­mets à nou­veau ma requête. Dans l'onglet avec le résul­tat du BLASTN, je constate main­te­nant que mon navi­ga­teur a gar­dé la trace de plu­sieurs d'échanges avec le ser­veur de la SGD. En par­ti­cu­lier, je trouve un fichier por­tant le nom de run_​blast (et qui semble avoir le temps d'échange le plus impor­tant)  :

blastn_3

 

En cli­quant sur ce fichier, je trouve dans la sec­tion "Form Data"  le détail des para­mètres envoyés par ma requête  (ô joie!) :

blastn_4

 

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

Auto­ma­ti­sa­tion du pro­ces­sus au moyen du lan­gage Python

Voi­ci donc un petit bout de code qui me per­met d'automatiser le pro­ces­sus. La seule sub­ti­li­té est d'utiliser les librai­ries url­lib et urllib2 four­nies avec une dis­tri­bu­tion Python de base :

Et voi­là ! La page inter­net conte­nant le résul­tat du BLASTN pour chaque séquence est conte­nue dans la variable nom­mée "res­ponse". Il ne reste plus qu'à "fouiller" dans cette page avec, par exemple, la librai­rie Beau­ti­ful soup pour extraire ce qui m'intéresse. Bon appé­tit !

Un grand pou­voir implique de grandes res­pon­sa­bi­li­tés.

Sou­mettre votre requête de cette manière est tota­le­ment iden­tique à la sou­mettre via le for­mu­laire en ligne. La dif­fé­rence est que vous pou­vez main­te­nant envoyer un grand nombre de requêtes très rapi­de­ment. Soyez donc pru­dent, car vous pou­vez ain­si mono­po­li­ser le ser­veur au détri­ment des autres uti­li­sa­teurs. Vos requêtes pour­raient ain­si être assi­mi­lées à une forme d'attaque de déni de ser­vice. Cer­taines per­sonnes n'apprécient pas et sont alors ten­tées de vous ban­nir de quelques heures à plu­sieurs jours pour l'accès à leur site inter­net.

Pour finir, je tiens à remer­cier mes relec­teurs : Aki­ra, Zazo0o et williamW.



Pour continuer la lecture :


Commentaires

Une réponse à “Automatiser la récupération de données biologiques : version avancée”

  1. Salut,

    Pour com­plé­ter l'article, il est aus­si pos­sible de faire ces requêtes en bio­py­thon :

    http://​bio​py​thon​.org/​D​I​S​T​/​d​o​c​s​/​a​p​i​/​B​i​o​.​E​n​t​r​e​z​-​m​o​d​u​l​e​.​h​tml

    Ou encore uti­li­ser les outils en ligne de l'EBI :

    http://​www​.ebi​.ac​.uk/​T​o​o​l​s​/​w​e​b​s​e​r​v​i​c​e​s​/​s​e​r​v​i​c​e​s​/​d​b​f​e​tch

    Tout n'est peut-être pas aus­si détaillé que dans cet article, mais ces outils sont sou­vent oubliés et/​ou igno­rés, donc une petite piqûre de rap­pel aide 🙂

    Bra­vo pour l'article !

Laisser un commentaire