如何从IOM指定URL下载Excel格式移民数据并直接导入R
错误原因
你当前代码的逻辑是爬取HTML页面提取下载链接,但你传入的URL已经是最终的Excel文件直链,不存在HTML结构,所以read_html()会直接解析失败,后续的节点选择操作也没有意义。你不需要额外爬取解析,直接基于该直链下载读取即可。
解决方案
方案1:先下载到本地再导入
适合需要留存本地文件的场景:
# 未安装依赖包先执行:install.packages("readxl") library(readxl) # 定义Excel文件直链 xlsx_url <- "https://migration.iom.int/system/tdf/datasets/Q2%202021%20Mixed%20Migration%20Flows%20to%20Europe%20%28April%20-%20June%202021%29.xlsx?file=1&type=node&id=12261" # 下载文件到本地,Windows系统必须加mode = "wb"避免二进制文件损坏 download.file(xlsx_url, destfile = "2021年第二季度欧洲混合移民流动数据.xlsx", mode = "wb") # 读取本地Excel,可通过sheet参数指定对应工作表 mig_data <- read_excel("2021年第二季度欧洲混合移民流动数据.xlsx", sheet = 1)
方案2:直接内存读取,不生成本地文件
适合不需要留存源文件的场景:
# 未安装依赖包先执行:install.packages(c("readxl", "httr", "magrittr")) library(readxl) library(httr) library(magrittr) xlsx_url <- "https://migration.iom.int/system/tdf/datasets/Q2%202021%20Mixed%20Migration%20Flows%20to%20Europe%20%28April%20-%20June%202021%29.xlsx?file=1&type=node&id=12261" # 直接读取网络文件二进制内容到内存解析 mig_data <- GET(xlsx_url) %>% content(what = "raw") %>% read_excel(sheet = 1)
补充说明
如果读取时提示工作表不存在,可以先用excel_sheets(文件路径/二进制内容)查看所有工作表名称,再替换sheet参数的取值即可。
内容的提问来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

