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

R语言使用read.csv读取指定URL文件失败,RCurl的getURL也无效

解决CBOE VXTH数据导入失败的问题

我之前也踩过类似的坑,你遇到的问题主要有两个核心原因:一是用了错误的函数处理Excel格式文件,二是CBOE的服务器会拦截没有合适请求头的自动化请求。下面给你几个靠谱的解决方案:

方法1:用httr+readxl直接读取(推荐)

这个方法不需要下载文件到本地,先模拟浏览器请求获取文件内容,再用Excel专用包解析:

首先安装需要的依赖包:

install.packages(c("httr", "readxl"))

然后运行以下代码:

library(httr)
library(readxl)

# 构造请求头,模拟正常浏览器访问,避免被服务器拦截
browser_headers <- add_headers(
  "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
)

# 发送请求获取文件
response <- GET("https://www.cboe.com/publish/vxthdata/vxth_dailydata.xls", browser_headers)

# 检查请求是否成功,如果失败会直接报错提示
stop_for_status(response)

# 从响应的二进制内容中读取Excel数据
vxth_data <- read_excel(content(response, "raw"))

# 验证数据是否正常加载
head(vxth_data)

方法2:先下载文件到本地再读取

如果你更习惯本地文件操作,可以先把文件下载到电脑,再读取:

library(httr)
library(readxl)

browser_headers <- add_headers(
  "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
)

# 下载文件到当前工作目录,覆盖已存在的同名文件
GET(
  "https://www.cboe.com/publish/vxthdata/vxth_dailydata.xls",
  browser_headers,
  write_disk("vxth_dailydata.xls", overwrite = TRUE)
)

# 读取本地Excel文件
vxth_data <- read_excel("vxth_dailydata.xls")

为什么之前的方法不行?

  • read.csv()是专门处理**逗号分隔的文本文件(.csv)**的,而你要导入的是二进制的Excel文件(.xls),直接用它会把二进制内容当成乱码文本读取,自然失败。
  • RCurl的getURL()默认返回文本内容,同样无法处理二进制Excel文件;而且没有设置模拟浏览器的请求头,CBOE的服务器会识别出这是自动化请求,直接拒绝或者返回错误内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:25:37