R语言读取URL向量中CSV时报no lines available in input错误求助
问题解决思路
- 优先修正read.csv调用参数:
read.csv()默认第一个参数为本地文件路径/网络连接对象,若你传入的是getURL()返回的CSV文本字符串,需要显式指定text参数,否则会把字符串内容当做文件名解析,直接返回空输入错误。修正后的测试代码为:
one <- getURL(URLs[1]) # 打印前100个字符确认返回内容 cat(substr(one, 1, 100)) # 用text参数读取文本内容 df <- read.csv(text = one)
- 替换老旧的请求工具,添加请求头规避反爬:RCurl包的
getURL()默认不带浏览器标识,很容易被目标站点的反爬策略拦截返回空内容。建议改用httr包发起请求,模拟正常浏览器请求头:
library(httr) res <- GET(URLs[1], user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")) # 先检查请求状态码,200才是正常返回 print(status_code(res)) # 解析返回内容为CSV df <- read.csv(text = content(res, as = "text"))
- 校验URL的有效性:你提供的URL中包含
token参数,这类鉴权参数通常是临时生效的,可能存在过期、绑定登录态、绑定IP的情况。你可以直接把第一条URL复制到浏览器隐身窗口打开,确认是否能正常下载CSV文件,如果浏览器也打不开,说明token失效,需要重新从myfxbook获取有效的请求token。 - 处理返回内容的特殊格式:如果确认返回的是CSV文本但仍然报错,可能是CSV开头有空行、注释行,或者分隔符/引号规则不符合默认配置,可以调整
read.csv的参数,比如添加skip = N跳过前N行、指定sep = ","、quote = '"'等参数适配格式。 - 批量请求添加延时:如果需要遍历整个URLs向量下载数据,每两次请求之间添加1-2秒的延时,避免请求频率过高被站点临时封禁IP,返回空内容。
内容的提问来源于stack exchange,提问作者user9085964
相关产品推荐
相关产品推荐

