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

Python 生物信息学:对BacDive数据库的编程访问,python,database,webpage,bioinformatics,Python,Database,Webpage,Bioinformatics,“BacDive”-()上的资源是一个非常有用的数据库,用于访问细菌知识,如菌株信息、物种信息和参数,如最佳生长温度 我有一个场景,在这个场景中,我在一个纯文本文件中有一组有机体名称,我想用编程的方式在Bacdive数据库(不允许下载平面文件)中逐个搜索它们,并检索相关信息并相应地填充我的文本文件 我需要完成哪些主要模块(如BeautifulSoup)?是直截了当的吗?是否允许以编程方式访问网页?我需要许可吗 细菌的名字应该是“假单胞菌”。搜索这个将在Bacdeve上获得60次点击。点击其中一个

“BacDive”-()上的资源是一个非常有用的数据库,用于访问细菌知识,如菌株信息、物种信息和参数,如最佳生长温度

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

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

细菌的名字应该是“假单胞菌”。搜索这个将在Bacdeve上获得60次点击。点击其中一个点击,我们进入特定页面,其中最重要的一行是:“生长温度:[参考文献:#27]推荐生长温度:26°C”

脚本必须访问bacdeve(我曾尝试使用请求访问bacdeve,但我觉得它们不允许编程访问,我向主持人询问了这一点,他们说我应该先注册他们的API)



我现在有了API访问权限。这是页面()。这对做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。如果要传递多个URL以获取其生长温度。通过打开文件调用函数(url)。代码被注释

希望对你有帮助。。
谢谢

这是解决方案

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。如果要传递多个URL以获取其生长温度。通过打开文件调用函数(url)。代码被注释

希望对你有帮助。。

谢谢

能否请您提供细菌的名称(您必须搜索平面文件中的文本),以便我们提供帮助。我的建议是使用requests和lxml从结果中提取数据。告诉我们确切的要求。感谢注意访问标签上写着“请勿使用此标签”@Fionnuala,我已删除了“访问”标签。@A.Chandu,我已编辑并添加了一个细菌示例。您好,我已成功获得60个结果。。。现在,我应该点击哪个链接来获取信息??你能给我们一些细菌的名字吗(你必须搜索平面文件中的文本),以便我们能提供帮助。我的建议是使用requests和lxml从结果中提取数据。告诉我们确切的要求。感谢注意访问标签上写着“请勿使用此标签”@Fionnuala,我已删除了“访问”标签。@A.Chandu,我已编辑并添加了一个细菌示例。您好,我已成功获得60个结果。。。现在我应该点击哪个链接来获取信息?这做得很好,而且很清楚。我喜欢使用正则表达式提取相关的数字数据!我已经用urllib替换了我版本中的请求。让我困惑的一点是如何真正开始对生物体的搜索,但现在我看到这似乎很简单。不过,我担心脚本的速度。如此之多,以至于我只考虑第一个链接,而不是筛选其余的链接(即61个点击)。你认为这是脚本运行最快的速度吗,大概是因为基于互联网的原因吧?唯一影响速度的是互联网:)我处理了1000个URL,所以不用担心。我建议你再去谢谢汉克斯钱都!可以我将找出如何在代码行数较少的情况下使用该API再打给你。。感谢RestfulAPI使用JSON。此外,为了更好地实现pythonic,JSON也很好。:)这做得很好,而且很清楚。我喜欢使用正则表达式提取相关的数字数据!我已经用urllib替换了我版本中的请求。让我困惑的一点是如何真正开始对生物体的搜索,但现在我看到这似乎很简单。不过,我担心脚本的速度。如此之多,以至于我只考虑第一个链接,而不是筛选其余的链接(即61个点击)。你认为这是脚本运行最快的速度吗,大概是因为基于互联网的原因吧?唯一影响速度的是互联网:)我处理了1000个URL,所以不用担心。我建议你再去谢谢汉克斯钱都!可以我将找出如何在代码行数较少的情况下使用该API再打给你。。感谢RestfulAPI使用JSON。此外,为了更好地实现pythonic,JSON也很好。:)