生物信息学:对BacDive数据库的编程访问

时间:2016-08-23 09:34:52

标签: python database webpage bioinformatics

“BacDive”的资源 - (http://bacdive.dsmz.de/)是一个非常有用的数据库,用于访问细菌知识,如菌株信息,物种信息和生长温度最优化等参数。

我有一个场景,其中我在纯文本文件中有一组有机体名称,我想以编程方式逐个搜索它们对着Bacdive数据库(不允许下载平面文件)并检索相关信息并相应地填充我的文本文件。

我需要完成的主要模块(例如beautifulsoups)是什么?它直截了当吗?是否允许以编程方式访问网页?我需要获得许可吗?

细菌名称是“Pseudomonas putida”。搜索这个将给予60点击bacdive。单击其中一个命中,将我们带到特定页面,其中“生长温度:[参考:#27]建议生长温度:26°C”是最重要的。

脚本必须访问bacdive(我尝试使用请求进行访问,但我觉得他们不允许编程访问,我已经向主持人询问了这个问题,他们说我应该首先注册他们的API。) / p>

我现在拥有API访问权限。这是页面(http://www.bacdive.dsmz.de/api/bacdive/)。这对于进行HTML抓取的人来说似乎很简单,但我现在不知道该怎样做才能访问API。

1 个答案:

答案 0 :(得分:3)

这是解决方案......

import re
import urllib
from bs4 import BeautifulSoup


def get_growth_temp(url):
    soup = BeautifulSoup(urllib.urlopen(url).read())
    no_hits = int(map(float, re.findall(r'[+-]?[0-9]+',str(soup.find_all("span", class_="searchresultlayerhits"))))[0])
    if no_hits > 1 :
        letters = soup.find_all("li", class_="searchresultrow1") + soup.find_all("li", class_="searchresultrow2")
    all_urls = []
    for i in letters:
        all_urls.append('http://bacdive.dsmz.de/index.php' + i.a["href"])
    max_temp = []
    for ind_url in all_urls:
        soup = BeautifulSoup(urllib.urlopen(ind_url).read())
        a = soup.body.findAll(text=re.compile('Recommended growth temperature :'))
       if a:
           max_temp.append(int(map(float, re.findall(r'[+-]?[0-9]+', str(a)))[0]))
    print "Recommended growth temperature : %d °C:\t" % max(max_temp)

url = 'http://bacdive.dsmz.de/index.php?search=Pseudomonas+putida'

if __name__ == "__main__":
        # TO Open file then iterate thru the urls/bacterias 
        # with open('file.txt', 'rU') as f:
        #   for url in f:
        #      get_growth_temp(url)
     get_growth_temp(url)

编辑:

我在这里传递单个网址。如果你想传递多个网址来获得它们的生长温度。通过打开文件来调用函数(url)。代码被评论。

希望它对你有所帮助.. 感谢