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

Bioinformatics : Programmatic Access to the BacDive Database

"BacDive" - ( http://bacdive.dsmz.de/) 的资源是一个非常有用的数据库,可用于获取细菌知识,例如菌株信息、物种信息和生长温度最佳值等参数。

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

我需要哪些主要模块(例如 beautifulsoups)来完成此任务?它是直截了当的吗?是否允许以编程方式访问网页?我需要许可吗?

细菌名称为 "Pseudomonas putida"。搜索这将在 bacdive 上获得 60 次匹配。单击其中一个点击,将我们带到特定页面,其中行:"Growth temperature: [Ref.: #27] Recommended growth temperature : 26 °C " 是最重要的。

脚本必须访问 bacdive(我曾尝试使用请求访问,但我觉得他们不允许编程访问,我已经问过版主,他们说我应该注册他们的 API 第一)。


我现在拥有 API 访问权限。这是页面 (http://www.bacdive.dsmz.de/api/bacdive/)。对于进行 HTML 抓取的人来说,这可能看起来很简单,但我不确定现在我可以访问 API 该做什么。

这是解决方案...

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。如果你想通过多个 urls 来获得它们的生长温度。通过打开文件调用函数(url)。代码已注释。

希望对你有帮助.. 谢谢