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

如何使用R语言抓取UNHCR联合国难民署官网的JSON格式公开数据

完整实现代码

首先安装所需依赖包(已安装可跳过):

install.packages(c("jsonlite", "rvest", "dplyr"))

主运行代码:

# 加载依赖包
library(jsonlite)
library(rvest)
library(dplyr)

# 目标页面配置
base_url <- "https://data2.unhcr.org/en/situations/mediterranean"
domain_prefix <- "https://data2.unhcr.org"

# 1. 解析页面提取所有.json后缀的数据链接
page_html <- read_html(base_url)
all_links <- page_html %>% html_elements("a") %>% html_attr("href")
# 筛选JSON链接并补全相对路径
json_links <- all_links[grepl("\\.json$", all_links)] %>% 
  sapply(function(x) {
    ifelse(startsWith(x, "http"), x, paste0(domain_prefix, x))
  }) %>% unique()

# 2. 批量抓取解析所有JSON数据
full_data <- list()
for (i in seq_along(json_links)) {
  # 增加请求间隔避免触发反爬限制
  Sys.sleep(1)
  tryCatch({
    json_data <- fromJSON(json_links[i])
    # 适配JSON结构转换为数据框
    if ("items" %in% names(json_data)) {
      df <- as.data.frame(json_data[["items"]])
    } else {
      df <- as.data.frame(json_data)
    }
    # 新增列标注数据来源
    df$source_json <- json_links[i]
    full_data[[i]] <- df
    message("已完成抓取:", json_links[i])
  }, error = function(e) {
    message("抓取失败:", json_links[i], " 错误:", e$message)
  })
}

# 3. 合并为统一目标表格
final_table <- bind_rows(full_data)

# 结果查看与导出
head(final_table)
# write.csv(final_table, "unhcr_mediterranean_data.csv", row.names = FALSE)

注意事项

  • 代码自带异常捕获逻辑,单个链接抓取失败不会中断整体流程
  • 若解析后字段和预期不符,可打印单条json_data查看实际结构,调整数据提取规则即可适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:45:03