HMDB数据库爬虫

经常我们需要使用功能HMDB数据库的一些代谢物信息,虽然HMDB收录的代谢物已经几十万种,但是信息清楚的还是分为子库的这些。这些物质一共有大约1万种,我这里分不同的子库进行爬虫,得到代谢物编号,和HMDB数据库编号;

随后更具HMDB数据库编号,匹配通路分类等信息。

导入需要的R包

# Load the package required to read website
library(XML)
library("httr")
library("magrittr")
library("rvest")
library("xml2")
library("stringr")
devtools::install_github("ChristianAmes/HMDBScraper")
library(HMDBScraper)# 包在github上,注意安装方式

测试爬虫代码

很简单的代码

#--爬取HMDB数据库
web <- read_html("https://hmdb.ca/bmi_metabolomics")
pag1 <- web %>%html_table() %>%.[[1]]
pag1

第一部分:bmi代谢租数据

dir.create("./HMDB爬虫/")#--第一部分:bmi代谢租数据#-----------
# 294是在网页直接看到的总条数,25是每页显示的条数。pages = 1:ceiling(294 / 25)
url <- "http://www.hmdb.ca/bmi_metabolomics?page="
url_all <- paste(url, pages, sep="")for (i in pages) {tem = url_all[i] %>% read_html %>%html_table() %>%.[[1]]if (i == 1) {dat = tem} else {dat = rbind(dat,tem)}
}head(dat)
write.csv(dat,"./HMDB爬虫/bim_HMDB.csv")

age代谢租数据

#--第二部分:age代谢租数据#-----------
pages = 1:ceiling(418 / 25)
url <- "https://hmdb.ca/age_metabolomics?page="
url_all <- paste(url, pages, sep="")for (i in pages) {tem = url_all[i] %>% read_html %>%html_table() %>%.[[1]]if (i == 1) {dat1 = tem} else {dat1 = rbind(dat1,tem)}
}
dim(dat1)
head(dat1)
write.csv(dat1,"./HMDB爬虫/age_HMDB.csv")

gender代谢租数据

#--第三部分:gender代谢租数据#-----------
pages = 1:ceiling(515 / 25)
url <- "https://hmdb.ca/gender_metabolomics?page="
url_all <- paste(url, pages, sep="")for (i in pages) {tem = url_all[i] %>% read_html %>%html_table() %>%.[[1]]if (i == 1) {dat2 = tem} else {dat2 = rbind(dat2,tem)}
}
dim(dat2)
head(dat2)write.csv(dat2,"./HMDB爬虫/gender_HMDB.csv")

geno代谢租数据

#--第四部分:geno代谢租数据#-----------
pages = 1:ceiling(6777 / 25)
url <- "https://hmdb.ca/geno_metabolomics?page="
url_all <- paste(url, pages, sep="")for (i in pages) {tem = url_all[i] %>% read_html %>%html_table() %>%.[[1]]if (i == 1) {dat3 = tem} else {dat3 = rbind(dat3,tem)}
}
head(dat3)
dim(dat3)
write.csv(dat3,"./HMDB爬虫/geno_HMDB.csv")

pharmaco代谢租数据

#--第五部分:pharmaco代谢租数据#-----------
pages = 1:ceiling(2497 / 25)
url <- "https://hmdb.ca/pharmaco_metabolomics?page="
url_all <- paste(url, pages, sep="")for (i in pages) {tem = url_all[i] %>% read_html %>%html_table() %>%.[[1]]if (i == 1) {dat4 = tem} else {dat4 = rbind(dat4,tem)}
}
head(dat4)
dim(dat4)
write.csv(dat4,"./HMDB爬虫/pharmaco_HMDB.csv")

diurnal代谢租数据

#--第六部分:diurnal代谢租数据#-----------
pages = 1:ceiling(2315 / 25)
url <- "https://hmdb.ca/pharmaco_metabolomics?page="
url_all <- paste(url, pages, sep="")for (i in pages) {tem = url_all[i] %>% read_html %>%html_table() %>%.[[1]]if (i == 1) {dat5 = tem} else {dat5 = rbind(dat5,tem)}
}
head(dat5)
dim(dat5)
write.csv(dat5,"./HMDB爬虫/diurnal_HMDB.csv")

清理合并数据

datall = data.frame(ID = c(dat$Metabolite,dat1$Metabolite,dat2$Metabolite,dat3$Metabolite,dat4$Metabolite,dat5$Metabolite))tail(datall,20)
datall$metabolite =
sapply(strsplit(datall$ID, "[(]HMDB"), `[`, 1)datall$HMDB_ID =  sapply(strsplit(datall$ID, "[(]HMDB"), `[`, 2)
datall$HMDB_ID = gsub(")","",datall$HMDB_ID)
datall$HMDB_ID = paste("HMDB",datall$HMDB_ID,sep = "")write.csv(datall,"./HMDB爬虫/all_HMDB_ID_metabolites.csv")

get.entry函数

别人的函数,但是他们R包正在开发中,无法进行很好使用,我摘出来一个函数用到这里。

#--获取代谢物全部信息
get.entry<- function(id, prefix= "http://www.hmdb.ca/metabolites/",check_availability=T){if(check_availability){if(!check.availability(id)){ stop(paste(id, " id could not be found"))}}#create linklink<- paste(prefix,id,".xml",sep= "")#download datatxt<- try(readLines(link))#error handling code, just try another 3 timesi<-1while(inherits(txt, "try-error")){print(paste("Retrieving has failed for ",i,". time",sep=""))txt<- try(readLines(link))i= i+1if(i>3) stop("Could not find Server or ID")}#process data to be usabledata<- XML::xmlTreeParse(txt,asText= T)data<- XML::xmlToList(data)return (data)
}
tem = read.csv("./HMDB爬虫/all_HMDB_ID_metabolites.csv",row.names = 1)
head(tem)
id0 = tem$HMDB_IDA = c()
B = c()
C = c()
D = c()
E = c()
G = c()
for (i in 373:length(id0)) {dat = try(get.entry(id = id0[i]) , silent = FALSE)# 提取kegg idif (!is.null(dat$kegg_id)) {A[i] = dat$kegg_id} else{A[i] = ""}if (!is.null(dat$taxonomy$description)) {# 提取描述信息B[i] =dat$taxonomy$description} else{B[i] = ""}if (!is.null(dat$taxonomy$kingdom)) {#-提取kingdom分类C[i] = dat$taxonomy$kingdom} else{B[i] = ""}if (!is.null(dat$taxonomy$super_class)) {# 提取super_class分类D[i] = dat$taxonomy$super_class} else{B[i] = ""}if (!is.null(dat$taxonomy$class)) {# 提取classE[i] = dat$taxonomy$class} else{B[i] = ""}if (!is.null(dat$taxonomy$sub_class)) {# 提取sub_class分类G[i]= dat$taxonomy$sub_class} else{B[i] = ""}print(i)}# 合并全部内容
tax.hmdb = data.frame(KEGGID = A,Descrip = B,Kingdom = C,Super_class = D,Class = E,Sub_class = G)根际互作生物学研究室 简介根际互作生物学研究室是沈其荣院士土壤微生物与有机肥团队下的一个关注于根际互作的研究小组。本小组由袁军副教授带领,主要关注:1.植物和微生物互作在抗病过程中的作用;2 环境微生物大数据整合研究;3 环境代谢组及其与微生物过程研究体系开发和应用。团队在过去三年中在 ISME J,Microbiome,Fundamental Research,iMeta, PCE,SBB,Horticulture Research,SEL,BMC plant biology等期刊上发表了多篇文章。欢迎关注 微生信生物 公众号对本研究小组进行了解。
撰写:文涛
修改:文涛审核:袁军
团队工作及其成果 (点击查看)
  • 团队关注

  • 团队文章成果

  • 团队成果-EasyStat专题

  • ggClusterNet专题

  • 袁老师小小组

了解 交流 合作

  • 团队成员邮箱 袁军:junyuan@njau.edu.cn;文涛:taowen@njau.edu.cn

  • 团队公众号:微生信生物 添加主编微信,或者后台留言。

  • 点击查看团队github主页

  • 点击查看南京农业大学资源于环境科学学院主页

大量土壤代谢物分类试试HMDB数据库-R语言爬虫HMDB数据库相关推荐

  1. r 连oracle数据库,R语言—连接Oracle数据库

    R语言-连接Oracle数据库 本教程会讲解两种方法,第一种方法较为简单,且中文不容易出现乱码.第二种方法,较为复杂,和java的jdbc连接数据库操作类似. 操作环境: 系统:windows10 6 ...

  2. R语言构建仿真数据库(sqlite)并使用dplyr语法和SQL语法查询数据库、将dplyr语法查询语句翻译为SQL查询语句

    R语言构建仿真数据库(sqlite)并使用dplyr语法和SQL语法查询数据库.将dplyr语法查询语句翻译为SQL查询语句 目录

  3. R语言之MYSQL数据库获取及输出

    R语言之MYSQL数据库获取及输出 在这里我们使用ODBC连接,连接之前请先配置ODBC MYSQL  ODBC下载地址:http://dev.mysql.com/downloads/connecto ...

  4. 使用R语言解析kegg数据库get请求

    使用R语言解析kegg数据库get请求 1. kegg数据库get请求 虽然kegg数据库提供了相关的Restful API来请求数据,但使用get请求查询出的数据是没有格式的字符串,如下: 要得到具 ...

  5. R语言爬虫:当当图书畅销榜(近7日)

    时间:2018-10-9 爬取内容:当当图书畅销榜(近7日):书名.作者.出版社.推荐率.出版时间.价格.折扣.网址 R语言爬虫:当当图书畅销榜(近7日) 通过对其他人爬虫代码的学习,发现有相当一部分 ...

  6. 豆瓣电影R语言爬虫和数据分析.

    主要内容: 1.r语言爬虫 rvest包的使用. 2.r语言字符串处理stringr包的使用. 3.r语言聚合dplyr 包的使用. 4.r语言可视化ggplot 包的使用. 5.r语言画词云图wor ...

  7. 数据挖掘r语言和python知乎_Hellobi Live |R语言爬虫实战案例分享:网易云课堂、知乎live、今日头条、B站视频...

    课程名称 R语言爬虫实战案例分享:网易云课堂.知乎live.今日头条.B站视频 网络数据抓取是数据科学中获取数据中的重要途径,但是一直以来受制于高门槛,都是专业程序员的专属技能.直到R语言和Pytho ...

  8. 手把手教你使用R语言爬虫在气象网站抓取气象数据并分析绘制热力日历图(1)

    我们做临床研究常见的烦恼为没有好的数据,目前气象网站上有很多关于气象因素和空气质量数据,但是没有系统的整理和格式等问题,我们使用起来非常不方便,而且很费时间,我们可以使用R语言爬虫工具对网站上的数据进 ...

  9. R语言对SEER数据库随机分为建模组和验证组

    我们从SEER数据库下载到数据库后,一个很重要的步骤就是把数据库随机分为建模组和验证组,一般来说的话是用70%的数据建模,30%的数据进行验证.因为我们很难找到和SEER数据库类似的数据进行外部验证, ...

最新文章

  1. compileReleaseJavaWithJavac
  2. pads铺铜不能开启drp_PowerPCB (PADS )常见问题全集-泪滴-规则设定
  3. java同步方法完成案例_Java同步代码块和同步方法原理与应用案例详解
  4. PHP统计网站pv(访问量)
  5. 数字图像处理实验(总计23个)汇总
  6. Linux 网卡信息查看
  7. 左神算法基础班4_4_3在二叉树中找到一个节点的后继节点
  8. [jQuery] 说说看jQuery的选择器有哪些?
  9. 数据结构-树的基础代码
  10. FineReport性能调优的一些办法
  11. 使用JIRA搭建企业问题跟踪系统.PART5(转)
  12. 股票交易接口dll有什么优势呢?
  13. 线程同步作业(一):Lock,monitor
  14. 计算半圆弧长及半圆的面积。(3分)
  15. DM8 数据守护(Data Watch)搭建
  16. 黑马小程序品优购商城项目分析
  17. 主方法外单独的两个类,不能直接互相调用
  18. EKF-SLAM simulated in MATLAB
  19. Redis 自动过期 使用 SET命令的EX选项和PX选项
  20. 如何邀请好友注册您的网站(模拟百度网盘)

热门文章

  1. 姚明今日携叶莉返京 大姚回归男篮阵容将变化
  2. java8 minecraft_我的世界java8对minecraft的影响
  3. 全国大学生软件创新大赛一等奖作品 —— HyllCube 三维四子棋
  4. 如何在局域网服务器部署网站,局域网如何对服务器配置
  5. ping命令——网卡选择
  6. 新浪云存储SCS的使用
  7. 莫烦keras学习代码二(手写数字识别MNIST classifier CNN版)
  8. 18.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
  9. 干旱生态系统中土壤真菌与细菌群落构建的关系
  10. 数据库原理与实践课设(宾馆管理系统),java+jdbc+sqlserver2017