R语言爬虫——物种分布信息采集
CVH(国家植物标本资源库)是查找物种分布点常用的网站:
CVH国家植物标本资源库(http://www.cvh.ac.cn/),植物记录多,是一个非常重要的获取物种分布信息的网站,但是,分布信息没有办法直接下载,不像GBIF那样。所以通常通过复制粘贴的方式进行数据收集会耗费大量的时间跟精力。通过爬虫将会大大缩短物种分布信息采集的时间。
R语言各路大神开发了R语言爬虫的许多包(RSelenium,rvest,,,)虽说爬虫生态没有python那么完善,对于一些基础网站也是可以轻松爬取。相信在未来R的爬虫肯定也会越来越好!!!
以下代码是基于rvest包,对CVH网站进行爬取:
注意:需要稍微了解一下html的基础。
CVH网站中,我们可以发现,物种分布信息记录在【详细】的这个超链接里面,同时每一页具有15个记录,所以最简单的步骤就是先爬取超链接,然后再从超链接里面爬取我们需要的数据,对于每一页15个超链接,我们再加入for循环即可。
*查看网站HTML,寻找数据保存在什么位置。
通过查看html可以发现,【详细】超链接存在table标签下面的a标签里面。第一条记录的超链接是【/spm/IBSC/0776185】,右键点击,copy,copy Xpath(这里可以通过google浏览器里面的selectorGadget插件辅助选择)。定位完成,然后爬取这个超链接。这里的超链接并不是一个完整的网址,一个完整的网址应该是http://,,,,,,,,,,通过查看完整可知其完整的网址应该是每一个超链接前面加上http://www.cvh.ac.cn
#首先用install安装rvest包,R基于3.61,Rstudio基于1.2版本
library(rvest) # 加载包
url <- 'http://www.cvh.ac.cn/search/%E6%A2%AD%E6%A2%AD?n=2' # 定义网址
url <- read_html(url) # 读取网址
url1 <- html_nodes(x = url, xpath = '//*[contains(concat( " ", @class, " " ), concat( " ", "td3", " " )) and (((count(preceding-sibling::*) + 1) = 7) and parent::*)]//a') # 提取超链接
url1
现在提取出来的其实是原始的a标签,我们需要的超链接应该是herf=” ”里面的内容,进一步整理。
url2 <- html_attr(x =url1, name = "href")
url2
下一步补全连接:
baseurl = "http://www.cvh.ac.cn" # 定义基础连接
web <- paste(baseurl,url2) # 网址合并
web之后才是完整的一个url:
然后从超链接里面爬取我们需要的数据,同样,先定位我们需要的数据再html中的位置。
GDM <- c() # 定义GDM 馆代码
DM <- c() # 定义DM 地名
for(i in 1:length(web)){
url <- web[i]
GDM[i] <- read_html(url) %>%html_nodes('.pd10+ .spdiv3 .spdiv2') %>% html_text()
GDM[i]<-gsub(pattern = "\r\n",replacement = "",GDM[i])
GDM[i]<-gsub(pattern = " ",replacement = "",GDM[i])
DM[i] <- read_html(url) %>%html_nodes('#o_spplace') %>% html_text()
data <- data.frame(DM,GDM)
}
date
到这里,第一页的15个数据爬取完成,但是这个物种有15页记录,要想完整爬取所有记录,可通过每一页url变化的规律,在以上代码的基础上外层再套一个for循环即可。
完整代码如下:
library(rvest) # 加载包
url <- 'http://www.cvh.ac.cn/search/%E6%A2%AD%E6%A2%AD?n=2' # 定义网址
url <- read_html(url) # 读取网址
url1 <- html_nodes(x = url, xpath = '//*[contains(concat( " ", @class, " " ), concat( " ", "td3", " " )) and (((count(preceding-sibling::*) + 1) = 7) and parent::*)]//a') # 提取超链接
url1
url2 <- html_attr(x =url1, name = "href")
url2
# 第二部分,定义基础网址,并将其与超链接合并成为一个完整的网址
baseurl = "http://www.cvh.ac.cn" # 定义基础连接
web <- paste(baseurl,url2) # 网址合并
web
# 第三部分,爬取将第一页的15个分布记录
GDM <- c() # 定义GDM 馆代码
DM <- c() # 定义DM 地名
for(i in 1:length(web)){
url <- web[i]
GDM[i] <- read_html(url) %>%html_nodes('.pd10+ .spdiv3 .spdiv2') %>% html_text()
GDM[i]<-gsub(pattern = "\r\n",replacement = "",GDM[i])
GDM[i]<-gsub(pattern = " ",replacement = "",GDM[i])
DM[i] <- read_html(url) %>%html_nodes('#o_spplace') %>% html_text()
data <- data.frame(DM,GDM)
}
data
以上,通过爬虫可直接获取物种分布记录。
声明:本文基于参考文摘进行编辑
本文供稿:微博
本文编辑:李旭东
百度搜索生信菜鸟驿站也可以关注哦:
进入主页面:
http://ya11266280.icoc.me/?_safeMode=false
联系邮箱:
R语言官方文档
http://www.cvh.ac.cn/
喜欢赶紧转发吧!!!