【问题标题】:Bioinformatics : Programmatic Access to the BacDive Database生物信息学:对 BacDive 数据库的编程访问
【发布时间】:2016-08-23 09:34:51
【问题描述】:

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

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

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

细菌名称应该是“恶臭假单胞菌”。搜索这将在 bacdive 上获得 60 次点击。单击其中一个点击,将我们带到特定页面,其中行:“生长温度:[Ref.:#27] 推荐的生长温度:26°C”是最重要的。

脚本必须访问 bacdive(我曾尝试使用 requests 访问,但我觉得他们不允许编程访问,我已经向版主询问了这个问题,他们说我应该先注册他们的 API)。


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

【问题讨论】:

  • 您能否给我们任何细菌的名称(您必须搜索的平面文件中的文本),以便我们提供帮助。我的建议是使用 requests 和 lxml 从结果中提取数据。告诉我们确切的要求。谢谢
  • 请注意访问标签上写着“不要使用这个标签”
  • @Fionnuala ,我已经删除了“访问”标签。
  • @A.Chandu,我已经编辑并添加了一个细菌示例。
  • 嗨,我成功获得了 60 个结果...现在我应该点击哪个链接来获取信息??

标签: python database webpage bioinformatics


【解决方案1】:

这里是解决方案...

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)。代码被注释了。

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

【讨论】:

  • 做得很好,而且很清楚。我喜欢使用正则表达式来获取相关的数字数据!我已将 urllib 替换为我的版本中的请求。困扰我的具体一点是如何真正开始对有机体的搜索,但现在我看到了这似乎很简单。我担心脚本的速度。如此之多,以至于我正在考虑只选择第一个链接而不筛选其余链接(即 61 次点击)。你认为这是脚本运行速度最快的吗,大概是因为基于互联网?
  • 这里唯一影响速度的是互联网 :) 我处理了 1000 个网址,所以不用担心。我建议你去文档谢谢
  • 再次感谢 Chandu!
  • 好的...我会弄清楚如何用更少的代码行数来使用该 API。 :) 回复你.. 谢谢
  • 在 RestfulAPI 中使用 JSON。对于更好的pythonic方式,JSON也很好。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
相关资源
最近更新 更多