我正在嘗試使用 R 中的 RCurl 包訪問以下 http 天氣資料目錄:
http://ncei.noaa.gov/data/global-summary-of-the-day/access/
在每年的每個目錄中都有一個獨特的氣象站串列。
我可以像這樣訪問任何特定的資料集
url = 'http://ncei.noaa.gov/data/global-summary-of-the-day/access/1932/03005099999.csv'
data = read.csv(url)
但是,我無法在不知道每個目錄中包含哪些檔案的情況下自動執行此程序。我嘗試使用 RCurl 包來獲取其中所有檔案的串列,但總是出現錯誤:
url = 'http://ncei.noaa.gov/data/global-summary-of-the-day/access/'
getURL(url)
這給了我以下輸出,說明地址已更改(到 https 地址)
[1] "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>301 Moved Permanently</title>\n</head><body>\n<h1>Moved Permanently</h1>\n<p>The document has moved <a href=\"https://ncei.noaa.gov/data/global-summary-of-the-day/access/\">here</a>.</p>\n</body></html>\n"
將地址更改為指示的 https url 會出現此錯誤
url = 'https://ncei.noaa.gov/data/global-summary-of-the-day/access/'
getURL(url)
Error in function (type, msg, asError = TRUE) : error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
我嘗試將 https: 替換為 ftps: 和 ftp: 這樣做會給我一個超時錯誤。
關于列印目錄的任何想法?
uj5u.com熱心網友回復:
我認為這里的問題是服務器僅支持使用 TLS 1.2 版的請求,而您的RCurl 不支持它。
您可以使用httr和來實作您想要的rvest。例如,要獲取列出 1929 目錄中檔案的 tibble:
library(httr)
library(rvest)
url1 <- "https://www.ncei.noaa.gov/data/global-summary-of-the-day/access/1929"
page_data <- GET(url1)
files <- content(page_data, as = "parsed") %>%
html_table() %>%
.[[1]]
files
# A tibble: 24 x 4
Name `Last modified` Size Description
<chr> <chr> <chr> <lgl>
1 "" "" "" NA
2 "Parent Directory" "" "-" NA
3 "03005099999.csv" "2019-01-19 12:37" "20K" NA
4 "03075099999.csv" "2019-01-19 12:37" "20K" NA
5 "03091099999.csv" "2019-01-19 12:37" "17K" NA
6 "03159099999.csv" "2019-01-19 12:37" "20K" NA
7 "03262099999.csv" "2019-01-19 12:37" "20K" NA
8 "03311099999.csv" "2019-01-19 12:37" "19K" NA
9 "03379099999.csv" "2019-01-19 12:37" "33K" NA
10 "03396099999.csv" "2019-01-19 12:37" "21K" NA
# ... with 14 more rows
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/385058.html
