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

如何使用R从受密码保护的URL批量下载Excel文件?

从密码保护网站批量下载Excel文件的R解决方案

下面推荐几个能处理登录凭证、实现批量下载的R包及具体用法,替代你之前尝试的XML包:

1. httr 包(最常用的HTTP工具)

httr可以轻松维持登录会话,通过POST请求提交凭证,再用同一个会话下载文件:

library(httr)

# 替换为目标网站的实际登录地址和凭证字段名
login_url <- "https://目标网站/login"
credentials <- list(username = "你的用户名", password = "你的密码")

# 发送登录请求,保存会话cookie
session <- POST(login_url, body = credentials, encode = "form")

# 待下载的Excel文件URL列表
file_urls <- c("https://目标网站/file1.xlsx", "https://目标网站/file2.xlsx")

# 循环批量下载
for (url in file_urls) {
  response <- GET(url, set_cookies(session$cookies))
  filename <- basename(url)
  writeBin(content(response, "raw"), filename)
}

注意:登录表单的字段名(比如不是username/password)需要用浏览器F12开发者工具查看登录请求的表单参数。

2. rvest + httr 组合(适合先爬取文件链接再下载)

如果不知道所有Excel文件的URL,可以先用rvest解析登录后的页面,提取文件链接再批量下载:

library(rvest)
library(httr)

# 初始化登录会话
session <- html_session("https://目标网站/login")

# 获取登录表单(根据实际情况调整表单索引)
login_form <- html_form(session)[[1]]

# 填写登录凭证
filled_form <- set_values(login_form, 
                          username = "你的用户名", 
                          password = "你的密码")

# 提交表单进入登录状态
session <- submit_form(session, filled_form)

# 爬取页面中所有xlsx格式的文件链接
file_links <- session %>% 
  html_nodes("a[href$='.xlsx']") %>% 
  html_attr("href") %>%
  url_absolute(session$url)

# 批量下载
for (link in file_links) {
  response <- GET(link, handle = session$handle)
  writeBin(content(response, "raw"), basename(link))
}

3. curl 包(处理复杂登录场景)

如果网站需要处理CSRF令牌等复杂验证,curl的handle机制更灵活:

library(curl)

# 创建curl会话handle
h <- new_handle()

# 先访问登录页获取CSRF令牌(按需执行)
login_page <- curl_fetch_memory("https://目标网站/login", handle = h)
csrf_token <- stringr::str_extract(rawToChar(login_page$content), 'name="csrf_token" value="(.*?)"') %>% 
  stringr::str_extract('value="(.*?)"') %>% 
  stringr::str_remove('value="|\"')

# 设置登录表单数据,包含CSRF令牌
handle_setform(h, 
               username = "你的用户名", 
               password = "你的密码",
               csrf_token = csrf_token)

# 发送登录请求
curl_fetch_memory("https://目标网站/login", handle = h)

# 批量下载文件
file_urls <- c("https://目标网站/file1.xlsx", "https://目标网站/file2.xlsx")
for (url in file_urls) {
  curl_download(url, destfile = basename(url), handle = h)
}

关键注意事项

  • 务必用浏览器开发者工具分析登录请求的细节:请求方法(POST/GET)、表单参数、是否需要CSRF令牌等,这些是成功登录的核心。
  • XML包主要用于XML数据解析,不适合处理HTTP会话和文件下载,所以换用上述包更合适。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:35:44