грешка при четене на .txt файл от URL в R

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

Данните, които искам да изтегля, се съхраняват тук, където на тази страница можете да вмъкнете номера на станцията и след това да бъдете насочени към набора от данни. Например, ако напиша номер на станция 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))
}

Това са всички валидни идентификационни номера на сайтове и връзката, предоставена и използвана за генериране на „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/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 файловете се генерират само когато търсите ръчно станциите на тази първа страница? Има ли заобиколно решение за това или някой има предложение как мога да накарам това да работи? Или може някой да потвърди, че това също е проблем на друга машина.


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