如何在R会话中从www2.census.gov下载指定压缩文件(原方法失效)
在R中下载Census.gov压缩文件的替代方案
需要下载的目标文件地址:https://www2.census.gov/programs-surveys/cps/datasets/2024/march/asecpub24sas.zip
该文件在Firefox/Chrome浏览器中可正常下载,但download.file()原生命令、httr::GET()直接请求原链接均失效,仅通过web.archive.org的归档链接使用GET()能成功,推测是目标网站安全策略限制了非浏览器标识的请求。
以下是两种可行的解决方法:
方法1:模拟浏览器请求头(推荐)
目标网站大概率会校验请求的User-Agent字段,模拟主流浏览器的请求头即可绕过限制。
用httr添加自定义请求头
library(httr) tf <- tempfile() this_url <- "https://www2.census.gov/programs-surveys/cps/datasets/2024/march/asecpub24sas.zip" # 模拟Chrome浏览器的User-Agent标识 GET( url = this_url, add_headers(`User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"), write_disk(path = tf, overwrite = TRUE), progress() )
用curl命令行调用(备选)
如果httr仍无法正常工作,可直接调用系统的curl工具(需确保环境已安装curl):
tf <- tempfile(fileext = ".zip") this_url <- "https://www2.census.gov/programs-surveys/cps/datasets/2024/march/asecpub24sas.zip" # 通过curl添加浏览器标识并下载 system( sprintf('curl -L -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" -o "%s" "%s"', tf, this_url) )
方法2:使用归档链接(备用)
若上述方法均失效,可继续使用web.archive.org的归档链接:
library(httr) tf <- tempfile() archive_url <- "https://web.archive.org/web/https://www2.census.gov/programs-surveys/cps/datasets/2024/march/asecpub24sas.zip" GET(archive_url, write_disk(tf, overwrite = TRUE), progress())
内容的提问来源于stack exchange,提问作者Anthony Damico
相关产品推荐
相关产品推荐

