ошибка при чтении файла .txt с URL-адреса в R

У меня возникли проблемы с чтением данных из Интернета в R.

Данные, которые я хочу загрузить, хранятся здесь, куда на этой странице можно вставить номер станции, а затем будет направлен к набору данных. Например, если я наберу в поле номер станции 615071800000, меня перенаправят на другую страницу, где я смогу затем выбрать данные и попросить просмотреть текстовый файл в браузере.

Поскольку у меня есть большое количество станций, с которых мне нужны данные, я решил написать для этого скрипт на 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))
}

Это все действительные идентификаторы сайта, и ссылка, предоставленная и использованная для создания «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

Итак, я копирую «str» для i = 7 в свой браузер.

http://data.giss.nasa.gov/tmp/gistemp/СТАНЦИИ/tmp_646066420010_14_0/station.txt

но страница пуста, и я получаю сообщение «Не найдено» вверху страницы.

Однако, если я вернусь на главную страницу (т.е. на первую ссылку, представленную здесь) и введу номер станции в поле, я попаду в данные, а затем скопирую ссылку на эту страницу в R:

http://data.giss.nasa.gov/tmp/gistemp/СТАНЦИИ/tmp_646066420010_14_0/station.txt

которая оказывается точно такой же строкой, которую я пробовал ранее. Почему это не сработало? Еще более странно то, что если я сейчас снова попытаюсь запустить код, R теперь вернет ту же ошибку при i == 8, то есть он нашел предыдущий файл, но не нашел следующий. Что тут происходит? Является ли это проблемой веб-сайта, например, файлы txt генерируются только при ручном поиске станций на этой первой странице? Есть ли обходной путь для этого, или у кого-нибудь есть предложение, как я могу заставить это работать? Или может кто-то проверить, что это также проблема на другой машине.


person Emma Tebbs    schedule 15.01.2016    source источник
comment
Вы должны сначала ввести все site_id в поле, указанное в первой ссылке, один за другим. Затем сайт создаст временные файлы для всех site_id. Здесь не рекомендуется читать из URL.   -  person Ven Yao    schedule 15.01.2016
comment
Итак, если мне нужно получить данные 1000 станций, мне придется вручную вводить идентификаторы 1000 отдельных сайтов в первую ссылку? Если так, то это не очень эффективно.   -  person Emma Tebbs    schedule 15.01.2016


Ответы (1)


Вы можете активировать сайт, запросив его заголовок с помощью 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))
})
person Robert Kirsten    schedule 15.01.2016