美文网首页R语言rice related analysis小教程收藏
第一次使用R爬取自己所需要的数据

第一次使用R爬取自己所需要的数据

作者: 热衷组培的二货潜 | 来源:发表于2018-08-22 22:36 被阅读31次

    打开网站

    http://rice.hzau.edu.cn/rice/clone/list.php?page=1&searchword=

    image.png
    我想找水稻中已经克隆了的基因,要我一页一页复制粘贴吗?哇,300多页,怕是要死人哦!
    于是我突然记得有一次我见过有人用R爬取过html网站的数据,我想应该会类似,于是打开我的收藏文件,找到该帖子从CAZy database中爬取数据+多恶心的数据都要坚持清洗,
    立马就现学现用。首先照着敲了一遍,其实就是从这里学会了一个新R包XML。
    • 1、找规律——

    page1的链接是这样的

    http://rice.hzau.edu.cn/rice/clone/list.php?page=1
    

    page2的链接是这样的

    http://rice.hzau.edu.cn/rice/clone/list.php?page=2
    

    于是不就得出规律了吗?只要把第一页的数据清洗出来,后面使用循环就好了?动手就做。

    library(XML)  ## 导入我们所需要的R包
    library(tidyverse) ## 数据筛选用
    url1 <- "http://rice.hzau.edu.cn/rice/clone/list.php?page=1"  ## 获取url链接
    df1 <- readHTMLTable(url1,header=T,stringAsFactors=F)   ## 读取页面数据
    raw_data <- as.data.frame(df1[[1]]) ## 从readHTMLTable得到的list挑选出我所需要的那个list 见下图
    select(raw_data,V3:V11) -> df1 ## 只要第三列以及以后的列
    na.omit(df1) -> df1  ## 去除缺失的列,
    colnames(df1) <- c("Gene","Gene_Symbol","Method_of_isolation","Chr","MSU_ID","MH63_ID","ZS97_ID","Same_or_not_in_MH63_ZS97","Fuction")  ## 赋值列名
    df1[-1,] -> df1 ## 去除第一行,原本的列名,但是中间又空格,可以自己清洗然后再直接变为列名。
    
    从readHTMLTable得到的list挑选出我所需要的那个list

    于是就清洗完了第一页。结果与我们的第一列的内容一毛一样


    于是开始建立函数

    get_data <- function(i){
      url <- paste("http://rice.hzau.edu.cn/rice/clone/list.php?page=", i, sep = "")
      data <- readHTMLTable(url,header=T,stringAsFactors=F)
      raw_data <- as.data.frame(data[[1]])
      select(raw_data,V3:V11) -> data
      na.omit(data) -> data
      colnames(data) <- c("Gene","Gene_Symbol","Method_of_isolation","Chr","MSU_ID","MH63_ID","ZS97_ID","Same_or_not_in_MH63_ZS97","Fuction")
      data[-1,] -> data
    }
    

    实践一下函数, 没毛病

    View(get_data(1))
    
    image.png

    于是利用for循环得到317个页面的数据,并合并到一个数据中

    data_result <- data.frame()
    for (i in c(1:317)) {
      data <- paste("data", i, sep = "")
      get_data(i) -> data
      rbind(data_result,data) -> data_result
    }
    

    最后查看我们的data_result文件,没毛病,4563个克隆的基因

    View(data_result)
    
    image.png

    为了进一步确认结果,查看最后几个基因是否与最后一页的内容一致? 也是一毛一样


    image.png
    image.png

    可怜我以前不懂事,还特异去一个个查看,基因是否已经被克隆。这下得到了数据库的所有基因,终于不用一个个查了,只要R语言的merge函数、linux的jion函数、TBtools的提取功能用的好,分分钟啊。手工回宿舍。

    相关文章

      网友评论

      • 热衷组培的二货潜:求大佬们帮我优化优化,for循环实在是太慢了。。。数据清洗本来想全部用tidyrver的%>%来做,但是还是放弃了

      本文标题:第一次使用R爬取自己所需要的数据

      本文链接:https://www.haomeiwen.com/subject/jyjuiftx.html