【问题标题】:Unable to access directory of HTML site using R (RCurl package)无法使用 R(RCurl 包)访问 HTML 站点的目录
【发布时间】:2022-01-19 22:50:46
【问题描述】:

我正在尝试使用 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: 这样做会给我一个超时错误。

对打印目录有什么想法吗?

【问题讨论】:

    标签: r http ftp rcurl


    【解决方案1】:

    我认为这里的问题是服务器仅支持使用 TLS 版本 1.2 和您的 RCurl does not support it 的请求。

    您可以使用httrrvest 实现您想要的。例如,要获取列出 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
    

    【讨论】:

    • 效果很好---谢谢!
    猜你喜欢
    • 2013-11-23
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多