如何使用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
相关产品推荐
相关产品推荐

