6

「Uniprot」形式のタンパク質名のリストがあり、それらをすべて MGI 形式に変換したいと考えています。www.uniprot.org にアクセスして uniprot タンパク質名を「クエリ」バーに入力すると、MGI 名を含むそのタンパク質に関する一連の情報を含むページが生成されます (ページのずっと下にあります)。

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

そのページに到達したら、Python の urllib を使用してそのページから MGI 名を抽出する方法を既に知っています。どうすればよいかわからないのは、Python コードを記述して、メイン ページで "Q9D880" のクエリを実行することです。リストには 270 のタンパク質名が含まれているため、各タンパク質名をクエリ バーにコピー アンド ペーストするのは避けた方がよいでしょう。

「Python アプリからの Google 検索」の投稿を見て、この概念をよりしっかりと理解しましたが、Google 検索を実行することは、uniprot.org などの他の Web サイトで検索機能を実行することとは異なると思います。

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

4

4 に答える 4

7

これを行うより簡単な方法は、requestsライブラリを使用することです。私のソリューションは、BeautifulSoup4 を使用してページから情報自体を取得することもできます。

クエリパラメータの辞書が与えられた場合、あなたがしなければならないことは次のとおりです。

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
于 2012-12-19T22:20:21.883 に答える
4

検索を実行すると、GET が実行されるように見えます

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

最終的にあなたをにリダイレクトします

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

したがって、urllibまたは http ライブラリ (私は を使用httplib2) を使用して、そのアドレスで GET を実行し、URL でタンパク質名をパラメーター化して、必要なタンパク質名を検索できるようにする必要があります。

于 2012-12-19T22:14:03.750 に答える
3

これは次の方法でも実行できます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
于 2012-12-19T22:32:35.753 に答える
1

クエリは URL にあり、次のように呼び出すことができます:
http://www.uniprot.org/uniprot/?query=1913775&sort=score

2.x がインストールされていないため、このスクリプトをテストする時間がありませんでしたが、2.x のコードは次のようになります。

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

私が実行した3.2のコードはこれで、うまくいきました:

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

名前のリストで MGIname をループするだけです

于 2012-12-19T22:22:39.337 に答える