Uso de Python para solicitar una página web para ejecutar una búsqueda

Tengo una lista de nombres de proteínas en el formato “Uniprot”, y me gustaría convertirlos todos al formato MGI. Si va a www.uniprot.org y escribe el nombre de la proteína uniprot en la barra de “Consulta”, generará una página con un montón de información sobre esa proteína, incluido su nombre MGI (aunque mucho más abajo en la página).

Por ejemplo, un nombre de Uniprot es “Q9D880”, y al desplazarse hacia abajo, puede ver que su nombre MGI correspondiente es “1913775”.

Ya sé cómo usar urllib de Python para extraer el nombre de MGI de una página una vez que llegue a esa página. Lo que no sé cómo hacer es escribir código Python para obtener la página principal para ejecutar una consulta de “Q9D880”. Mi lista contiene 270 nombres de proteínas, por lo que sería bueno evitar copiar y pegar cada nombre de proteína en la barra de consultas.

Vi la publicación “Búsqueda de Google desde una aplicación de Python”, y tengo una comprensión más firme de este concepto, pero sospecho que ejecutar una búsqueda de Google es diferente de ejecutar la función de búsqueda en algún otro sitio web, como uniprot.org.

Estoy ejecutando Python 2.7.2, pero estoy abierto a implementar soluciones que usen otras versiones de Python. ¡Gracias por la ayuda!

La forma más sencilla de hacerlo es con la biblioteca de requests . Mi solución para usted también toma la información de la página usando BeautifulSoup4.

Todo lo que tendrías que hacer , dado un diccionario de tus parámetros de consulta, es:

 from bs4 import BeautifulSoup as BS for protein in my_protein_list: text = requests.get('http://www.uniprot.org/uniprot/' + protein).text soup = BS(text) MGI = soup.find(name='a', onclick="UniProt.analytics('DR-lines', 'click', 'DR-MGI');").text MGI = MGI[4:] print protein +' - ' + MGI 

Ejecutar la búsqueda parece hacer un GET en

 http://www.uniprot.org/?dataset=uniprot&query=Q9D880&sort=score&url=&lucky=no&random=no 

Lo que eventualmente te redirige a

 http://www.uniprot.org/uniprot/Q9D880 

Por lo tanto, debería poder usar urllib o una biblioteca http (yo uso httplib2 ) para hacer un GET en esa dirección, parametrizando el nombre de la proteína en la URL para que pueda buscar el nombre de la proteína que desee.

También puedes hacer esto con PyQuery :

 >>> from pyquery import PyQuery as pq >>> url = "http://www.uniprot.org/uniprot/{name}" >>> name = "Q9D880" >>> response = pq(url=url.format(name=name)) >>> print html("a").filter(lambda e: pq(this).text().startswith("MGI:")).text() MGI:1913775 

La consulta está en la URL, puedes llamar a:
http://www.uniprot.org/uniprot/?query=1913775&sort=score

No tuve tiempo para probar esta secuencia de comandos ya que no tengo 2.x instalado, pero el código en 2.x debería ser algo como esto:

 import urllib MGIName = "1913775" print urllib.urlopen( "http://www.uniprot.org/uniprot/?query="+ MGIName +"&sort=score").read() 

El código en 3.2 me encontré con esto y funcionó bien:

 >>> import urllib.request >>> MGIName = "1913775" >>> print(urllib.request.urlopen("http://www.uniprot.org/uniprot/?query="+ MGIName +"&sort=score").read()) 

Simplemente pase el MGIname sobre la lista de nombres