You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R实现BirdLife Data Zone物种信息的自动化提取?

R代码自动化提取BirdLife Data Zone物种数据

前置准备

先安装并加载所需R包:

install.packages(c("rvest", "dplyr", "openxlsx", "httr"))
library(rvest)
library(dplyr)
library(openxlsx)
library(httr)

核心代码实现

替换target_species为你的目标物种科学名列表,即可批量提取分布国家、海拔范围等信息:

# 目标物种科学名列表(示例)
target_species <- c("Passer montanus", "Haliaeetus albicilla")

# 初始化结果数据框
result_df <- data.frame(
  物种科学名 = character(),
  分布国家 = character(),
  分布海拔 = character(),
  stringsAsFactors = FALSE
)

# 遍历每个物种
for (sp in target_species) {
  # 构造物种页面URL(BirdLife物种页固定格式:替换科学名空格为横杠)
  sp_clean <- gsub(" ", "-", tolower(sp))
  url <- paste0("http://datazone.birdlife.org/species/factsheet/", sp_clean)
  
  # 添加延迟避免触发反爬机制
  Sys.sleep(2)
  tryCatch({
    # 模拟浏览器请求页面
    page <- read_html(GET(url, user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")))
    
    # 提取分布国家(通过XPath定位元素,需注意页面结构可能更新)
    range_countries <- page %>% 
      html_element(xpath = "//div[h3[text()='Distribution']]/following-sibling::div//ul[contains(@class, 'list-inline')]") %>% 
      html_text(trim = TRUE)
    
    # 提取分布海拔信息
    elevation <- page %>% 
      html_element(xpath = "//div[h3[text()='Habitat and Ecology']]/following-sibling::div//li[contains(text(), 'Altitude')]") %>% 
      html_text(trim = TRUE)
    
    # 将结果存入数据框
    result_df <- result_df %>% 
      add_row(
        物种科学名 = sp,
        分布国家 = ifelse(is.na(range_countries), "未获取到数据", range_countries),
        分布海拔 = ifelse(is.na(elevation), "未获取到数据", elevation)
      )
    
    message(sp, " 数据提取完成")
  }, error = function(e) {
    message(sp, " 提取失败:", e$message)
    result_df <- result_df %>% 
      add_row(
        物种科学名 = sp,
        分布国家 = "提取失败",
        分布海拔 = "提取失败"
      )
  })
}

# 导出结果到Excel
write.xlsx(result_df, "BirdLife物种数据提取结果.xlsx", rowNames = FALSE)

关键提示

  • 页面结构适配:若后续代码无法提取数据,需用浏览器开发者工具重新定位元素的XPath或CSS选择器(BirdLife页面结构可能更新)。
  • 合规爬取:严格遵守BirdLife Data Zone的使用条款,避免高频请求,可适当延长Sys.sleep()的间隔时间。
  • 物种名准确性:必须使用准确的物种科学名(大小写、空格格式正确),否则无法定位到对应物种页面。

内容的提问来源于stack exchange,提问作者PowellHall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:30:15