2012-12-19 5 views
5

タンパク質名のリストが「Uniprot」形式であり、それらをすべてMGI形式に変換したいと思います。あなたがwww.uniprot.orgに行き、 "質問"バーにuniprotタンパク質の名前を入力すると、MGI名を含むそのタンパク質についての情報がたくさんあるページが生成されます。Pythonを使用してWebページに検索を実行するよう依頼する

たとえば、Uniprotの名前は「Q9D880」で、スクロールすると、対応するMGI名が「1913775」であることがわかります。

私は既に、そのページに移動した後、Pythonのurllibを使ってページからMGI名を抽出する方法を知っています。私はをしませんする方法を知っている "Q9D880"のクエリを実行するメインページを取得するPythonコードを書いています。私のリストには270のタンパク質名が含まれているので、&を各クエリーバーに貼り付けるのは避けるのが良いでしょう。

私は「Python AppからGoogle検索」記事を見ましたが、私はこの概念をしっかり理解していますが、Google検索を実行することはuniprotのような他のウェブサイトで検索機能を実行することとは異なると思われます。 org。

私はPython 2.7.2を実行していますが、他のバージョンのPythonを使用するソリューションを実装することは可能です。助けてくれてありがとう!検索を実行する

+4

見て、私は走っ3.2でコードはこれとそれがうまく働きましたあなたがクエリを実行したときに得られるURL:http://www.uniprot.org/uniprot/Q9D880あなたが本当に難しいと思えば、あなたのクエリがどこに行きましたかを知ることができます... – l4mpi

+0

私はウェブ開発について何も知りませんが、私はこれを見ることができたはずです!ありがとう! –

答えて

3

は最終的にあなたがurllibまたはHTTPライブラリを使用することができるはず

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

にリダイレクト

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

でGET(私はを使用)への操作を行うように見えますあなたはあなたが望むどんなタンパク質名でも検索できるように、URLのタンパク質名をパラメータ化してそのアドレスでGETします。

5

これを行う簡単な方法は、requestsライブラリです。あなたのための私のソリューションは、BeautifulSoup4を使用してページから情報そのものを取得します。

すべてのあなたは、あなたのクエリパラメータの辞書与えられ、doする必要があると思います:

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 
+0

私のプログラムが届くと名前エラーになる 'soup = BS(text)' 名前 'BS'は定義されていません。何か案は? –

+0

ええ、申し訳ありませんが、明示的にインポートを言うのを忘れて、今見て – jdotjdot

+0

ありがとう、それは助けた。残念ながら、私はもう別の問題に直面しています。 'MGI = soup.find(name ....'は 'None '型を返しています。私はその要素がウェブページ上にあることを知っていますので、BSの文書のトラブルシューティングのセクションに行きました。もしそうなら、「libxml2 2.6.21以降」と「libxslt 1.1.15以降」という2つの要件をダウンロードする方法を理解するのに役立つかもしれません。このURLでftp://xmlsoft.org/libxml2/私はちょうど実際に長くて紛らわしいファイルのリストを見ていますどこから始めるべきか分かりません –

1

クエリはURLで、あなたが呼び出すことができますされています
http://www.uniprot.org/uniprot/?query=1913775&sort=score

私はdidnの」私は2.xをもうインストールしていないのでこのスクリプトをテストする時間がありますが、2.xのコードは次のようなものでなければなりません:

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

だけループMGInameます。またPyQueryでこれを行うことができます名前

2

のリストの上に:で

>>> 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 
関連する問題