2014-01-07 3 views
0

Я хочу загрузить, чтобы загрузить первый файл pdb из результата поиска (ссылка для скачивания, приведенная ниже). Я использую python, selenium и beautifulsoup. Я разработал код до этого момента.скачать файл с помощью python beautifulsoup и selenium

import urllib2 
from BeautifulSoup import BeautifulSoup 
from selenium import webdriver 


uni_id = "P22216" 

# set parameters 
download_dir = "/home/home/Desktop/" 
url = "http://www.rcsb.org/pdb/search/smart.do?smartComparator=and&smartSearchSubtype_0=UpAccessionIdQuery&target=Current&accessionIdList_0=%s" % uni_id 

print "url - ", url 


# opening the url 
text = urllib2.urlopen(url).read(); 

#print "text : ", text 
soup = BeautifulSoup(text); 
#print soup 
print 


table = soup.find("table", {"class":"queryBlue"}) 
#print "table : ", table 

status = 0 
rows = table.findAll('tr') 
for tr in rows: 
    try: 
     cols = tr.findAll('td') 
     if cols: 
      link = cols[1].find('a').get('href') 
     print "link : ", link 
      if link: 
       if status==1: 
        main_url = "http://www.rcsb.org" + link 
       print "main_url-----", main_url 
       status = False 
       browser.click(main_url) 
     status+=1 

    except: 
    pass 

Я получаю форму как никто.
Как загрузить первый файл в списке поиска? (Т.е. 2YGV в данном случае)

Download link is : /pdb/protein/P32447 
+0

Работы для меня. Получение '/pdb/explore/explore.do? StructureId = 2YGV'. В чем проблема? Вы не можете скачать его? – ton1c

+0

Я также получил это, но как скачать этот файл. dats моя проблема – sam

ответ

2

Я не уверен, что именно вы пытаетесь загрузить, но вот пример того, как загрузить файл 2YGV:

import urllib 
import urllib2 
from bs4 import BeautifulSoup  

uni_id = "P22216"  
url = "http://www.rcsb.org/pdb/search/smart.do?smartComparator=and&smartSearchSubtype_0=UpAccessionIdQuery&target=Current&accessionIdList_0=%s" % uni_id  
text = urllib2.urlopen(url).read()  
soup = BeautifulSoup(text)  
link = soup.find("span", {"class":"iconSet-main icon-download"}).parent.get("href")  
urllib.urlretrieve("http://www.rcsb.org/" + str(link), str(link.split("=")[-1]) + ".pdb") 

Этот сценарий будет скачать этот файл из ссылки на странице. Этот скрипт не нужен selenium, но я использовал urllib для извлечения файла. Вы можете прочитать this post для получения дополнительной информации, как скачивать файлы с помощью urllib.


Edit:

Или использовать этот код, чтобы найти ссылку на скачивание (все зависит от того, какие файлы из какой URL вы хотите скачать):

import urllib 
import urllib2 
from bs4 import BeautifulSoup 


uni_id = "P22216" 
url = "http://www.rcsb.org/pdb/search/smart.do?smartComparator=and&smartSearchSubtype_0=UpAccessionIdQuery&target=Current&accessionIdList_0=%s" % uni_id 
text = urllib2.urlopen(url).read() 
soup = BeautifulSoup(text) 
table = soup.find("table", {"class":"queryBlue"}) 
link = table.find("a", {"class":"tooltip"}).get("href") 
urllib.urlretrieve("http://www.rcsb.org/" + str(link), str(link.split("=")[-1]) + ".pdb") 

Вот пример того, как вы могли бы сделать то, что вы задали в комментарии:

import mechanize 
from bs4 import BeautifulSoup 


SEARCH_URL = "http://www.rcsb.org/pdb/home/home.do" 

l = ["YGL130W", "YDL159W", "YOR181W"] 
browser = mechanize.Browser() 

for item in l: 
    browser.open(SEARCH_URL) 
    browser.select_form(nr=0) 
    browser["q"] = item 
    html = browser.submit() 

    soup = BeautifulSoup(html) 
    table = soup.find("table", {"class":"queryBlue"}) 
    if table: 
     link = table.find("a", {"class":"tooltip"}).get("href") 
     browser.retrieve("http://www.rcsb.org/" + str(link), str(link.split("=")[-1]) + ".pdb")[0] 
     print "Downloaded " + item + " as " + str(link.split("=")[-1]) + ".pdb" 
    else: 
     print item + " was not found" 

Выход:

Downloaded YGL130W as 3KYH.pdb 
Downloaded YDL159W as 3FWB.pdb 
YOR181W was not found 
+0

Я читаю и понимаю ваш код. Благодарю. У меня есть список l = [YGL130W, YDL159W, YOR181W]. с этим я должен перейти на http://www.rcsb.org/pdb/home/home.do, а затем я должен взять каждый идентификатор и выполнить поиск на этом сайте. страница результатов имеет ссылку поиска pdb. Я должен нажать на это, а затем получить страницу загрузки pdb или получить несколько pdbs. Если несколько pdbs, то мне нужно загрузить 1-й pdb результата поиска. – sam

+1

Отредактированный ответ. Надеюсь, это поможет – ton1c

+0

ур удивительный coder.thanks – sam

Смежные вопросы