2012-12-19 24 views
5

मेरे पास "यूनिप्रोट" प्रारूप में प्रोटीन नामों की एक सूची है, और मैं उन्हें सभी को एमजीआई प्रारूप में परिवर्तित करना चाहता हूं। यदि आप www.uniprot.org पर जाते हैं और "क्वेरी" बार में यूनिप्रोट प्रोटीन नाम टाइप करते हैं, तो यह उस प्रोटीन के बारे में जानकारी के समूह के साथ एक पृष्ठ उत्पन्न करेगा, जिसमें एमजीआई नाम भी शामिल है (हालांकि पृष्ठ को और भी नीचे)।एक खोज पेज चलाने के लिए पाइथन का उपयोग करके

उदाहरण के लिए, एक यूनिप्रोट नाम "Q9D880" है, और नीचे स्क्रॉल करके, आप देख सकते हैं कि इसका संबंधित एमजीआई नाम "1 9 13775" है।

मुझे पहले से ही पता है कि पृष्ठ पर मिलने के बाद एमजीआई नाम निकालने के लिए पाइथन के urllib का उपयोग कैसे करें। मैं नहीं जानता कि मुख्य पृष्ठ को "Q9D880" क्वेरी चलाने के लिए पाइथन कोड कैसे लिखना है। मेरी सूची में 270 प्रोटीन नाम हैं, इसलिए & प्रत्येक प्रोटीन नाम को क्वेरी बार में पेस्ट करने से बचने के लिए अच्छा लगेगा।

मैंने "एक पाइथन ऐप से Google खोज" पोस्ट देखा, और मुझे इस अवधारणा की दृढ़ समझ है, लेकिन मुझे संदेह है कि Google खोज चलाना किसी अन्य वेबसाइट पर खोज फ़ंक्शन चलाने से अलग है, जैसे uniprot। org।

मैं पाइथन 2.7.2 चला रहा हूं, लेकिन मैं पाइथन के अन्य संस्करणों का उपयोग करने वाले समाधानों को लागू करने के लिए खुला हूं। सहायता के लिए धन्यवाद!

+4

देखो जब आप कोई क्वेरी करते हैं तो आपको प्राप्त यूआरएल: http://www.uniprot.org/uniprot/Q9D880 यदि आप वास्तव में कड़ी मेहनत करते हैं तो आप यह पता लगा सकते हैं कि आपकी क्वेरी कहां गई ... – l4mpi

+0

मुझे वेब विकास के बारे में कुछ भी पता नहीं है, लेकिन यहां तक ​​कि * मैं * यह देखने में सक्षम होना चाहिए था! धन्यवाद! –

उत्तर

3

खोज चल रहा है तो तुम urllib या एक http पुस्तकालय (मैं का उपयोग करें) करने के लिए उपयोग करने के लिए सक्षम होना चाहिए

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

कौन सा अंततः

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

को रीडायरेक्ट पर एक मिलता है प्रतीत होता है यूआरएल में प्रोटीन नाम को पैरामीटर करने के लिए उस पते पर एक प्राप्त करें ताकि आप जो भी प्रोटीन नाम चाहते हैं उसे खोज सकें।

5

ऐसा करने का आसान तरीका requests लाइब्रेरी के साथ है। सुंदर समाधान 4 का उपयोग करके आपके लिए मेरा समाधान पृष्ठ से जानकारी को भी पकड़ लेता है।

सभी आप अपनी क्वेरी पैरामीटर के साथ शब्दकोश दिया 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

जब मेरा प्रोग्राम 'सूप = बीएस (टेक्स्ट)' कहता है कि नाम 'बीएस' परिभाषित नहीं किया गया है, तो मुझे एक नाम त्रुटि मिल रही है। कोई विचार? –

+0

हाँ क्षमा करें, आयात को स्पष्ट रूप से कहना भूल गए, अब देखें – jdotjdot

+0

धन्यवाद, इससे मदद मिली। दुर्भाग्य से, मैं अब एक और समस्या में भाग रहा हूँ। रेखा 'एमजीआई = soup.find (नाम ....' एक "कोई नहीं" प्रकार लौटा रहा है। मुझे पता है कि वह तत्व वेबपृष्ठ पर है, इसलिए मैं बीएस दस्तावेज़ीकरण के समस्या निवारण खंड में गया। यह मेरे पार्सर को अपग्रेड करने का सुझाव दिया 'lxml' डाउनलोड करके। क्या वह कुछ है जो आपने पहले ही किया है? यदि ऐसा है, तो हो सकता है कि आप मुझे दो आवश्यकताओं को डाउनलोड करने में मदद कर सकें, "libxml2 2.6.21 या बाद में" और "libxslt 1.1.15 या बाद में"। इस यूआरएल पर ftp://xmlsoft.org/libxml2/ मैं बस फाइलों की एक बहुत लंबी और भ्रमित सूची देखता हूं। पता नहीं कहां से शुरू करना है। –

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
2

तुम भी 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 
संबंधित मुद्दे

 संबंधित मुद्दे