r - 从R中的URL读取.txt文件时出错

标签 r url error-handling file-handling

从Web读取数据到R时遇到一些问题。

我希望下载的数据存储在here中,您可以在此页面上插入站号,然后定向到数据集。例如,如果我在框中输入站号615071800000,我将被重定向到另一个页面,然后可以在其中选择数据并要求在浏览器中查看txt文件。

由于我要从大量工作站中获取数据,因此我决定在R中编写脚本来执行此操作。下面是一个示例:

site_id <- c('615071800000','629065900000','617106090000','617107080000',
             '615071900000','646066100000','646066420010','646067000000')
for (i in 1:length(site_id)){
  web_str <- 'http://data.giss.nasa.gov/tmp/gistemp/STATIONS/tmp_'
  str <- paste(web_str,site_id[i],'_14_0/station.txt', sep = '')

  # read data from web
  dat <- read.table(str, sep = "", header = TRUE,
                    fill = TRUE, na.string = c(999.9,999.90))
}

这些都是有效的网站ID,提供并用于生成“str”的链接应将我引导至数据。但是,当我在此示例集上运行代码时,它将失败。运行此示例,我得到:
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") : cannot open: HTTP status was '404 Not Found'

对我来说这发生在循环i == 7

因此,我将i = 7的“str”复制到浏览器中

http://data.giss.nasa.gov/tmp/gistemp/STATIONS/tmp_646066420010_14_0/station.txt

但页面为空,页面顶部显示消息“未找到”。

但是,如果我返回主页(即此处提供的第一个链接)并在字段中键入站号,则会将我带到数据中,然后将该页面的链接复制到R中:

http://data.giss.nasa.gov/tmp/gistemp/STATIONS/tmp_646066420010_14_0/station.txt

原来是我之前尝试过的字符串。为什么这不起作用?更奇怪的是,如果我现在再次尝试运行代码,R现在会在i == 8时返回相同的错误,即找到的是前一个文件,而不是下一个文件。这里发生了什么?这是网站的问题吗,例如txt文件仅在您手动搜索该首页上的站点时生成?是否有解决方法,或者有人对我如何进行这项工作提出建议?或者有人可以证明这也是另一台计算机上的问题。

最佳答案

您可以通过使用curlGetHeaders请求其标题来触发该站点。然后,创建临时文件,您便可以接收数据。
尝试这个:

dat <- lapply(site_id, function(id) {
  web_str <- 'http://data.giss.nasa.gov/tmp/gistemp/STATIONS/tmp_'
  data_str <- paste(web_str,id,'_14_0/station.txt', sep = '')
  header_str <- paste('http://data.giss.nasa.gov/cgi-bin/gistemp/find_station.cgi?dt=1&ds=14&name=', id, sep = '')
  curlGetHeaders(header_str)
  read.table(data_str, sep = "", header = TRUE, fill = TRUE, na.string = c(999.9,999.90))
})

关于r - 从R中的URL读取.txt文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34809145/

相关文章:

c++ - 在 Rcpp 中有效地生成随机比特流

r - 如何在R中找到字符串的长度

r - 在R中的数据集中以相等的间隔计算总数的百分比

javascript - 隐藏 html/javascript 文件中的 url

php - 获取 “mysqli::real_connect(): (HY000/2002): Connection refused”

php - Slim 忽略 try catch block

r - group by 之后加入 data.table

angularjs - 如何从 Amazon 上的 Angular 应用程序 (Elastic Beanstalk) 中的 url 中删除 #

security - secret URL 真的安全吗?

python - 在/polls找不到页面