2014-04-12 58 views
26

我想使用download.file()将在线数据读取到R,如下所示。使用download.file从下载HTTPS文件()

URL <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv" 
download.file(URL, destfile = "./data/data.csv", method="curl") 

有人建议,我认为我行添加setInternet2(TRUE),但它仍然无法正常工作。

我得到的错误是:

Warning messages: 
1: running command 'curl "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv" -o "./data/data.csv"' had status 127 
2: In download.file(URL, destfile = "./data/data.csv", method = "curl", : 
    download had nonzero exit status 

感谢你的帮助。

+0

什么问题你看到下面?它是否因某种错误而失败或根本没有返回到控制台?它是否显示不更新的进度条?额外的信息将有助于诊断问题。 –

+1

你有卷曲吗? – A5C1D2H2I1M1N2O1R2T1

+1

你使用哪个操作系统? – sgibb

回答

34

这可能是最简单的尝试RCurl包。安装包,请尝试以下操作:

# install.packages("RCurl") 
library(RCurl) 
URL <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv" 
x <- getURL(URL) 
## Or 
## x <- getURL(URL, ssl.verifypeer = FALSE) 
out <- read.csv(textConnection(x)) 
head(out[1:6]) 
# RT SERIALNO DIVISION PUMA REGION ST 
# 1 H  186  8 700  4 16 
# 2 H  306  8 700  4 16 
# 3 H  395  8 100  4 16 
# 4 H  506  8 700  4 16 
# 5 H  835  8 800  4 16 
# 6 H  989  8 700  4 16 
dim(out) 
# [1] 6496 188 

download.file("https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv",destfile="reviews.csv",method="libcurl") 
+0

嗨阿南达。但是,当使用getURL(URL)时,出现以下错误消息: > x < - getURL(URL) 函数错误(type,msg,asError = TRUE): SSL证书问题,请验证CA证书是否正常。详细信息: 错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败 – useR

+4

@Yin,您可以尝试在'getURL'语句中添加'ssl.verifypeer = FALSE'。 – A5C1D2H2I1M1N2O1R2T1

+0

它的作品=]非常感谢。 – useR

4

我用下面的代码成功:

url = "http://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv" 
x = read.csv(file=url) 

注意,我从HTTPSHTTP更改了协议,因为第一个在R中似乎不受支持。

+2

这个“解决方案”的问题是,并非所有https url都可以用http替换。 “RCurl”软件包通常在很多情况下都做得很好。 – A5C1D2H2I1M1N2O1R2T1

+2

这不是解决问题的办法。只有在您无法解决问题时才应考虑应对变通办法。 – Muktadir

+0

这解决了这个问题,并且不需要安装外部依赖关系或搞乱SSL证书。它可能不适用于所有情况,但它适用于此。 – bonh

1

127表示未找到命令

在你的情况下,没有找到curl命令。因此,这意味着,没有发现卷曲。

您需要安装/重新安装CURL。就这样。从http://curl.haxx.se/download.html获取最新版本

安装前关闭RStudio。

2

如果使用RCurl,GetURL()函数会出现SSL错误,然后在GetURL()之前设置这些选项。这将全局设置CurlSSL设置。

扩展代码:

install.packages("RCurl") 
library(RCurl) 
options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))) 
URL <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv" 
x <- getURL(URL) 

使用R3.1.0为我工作在Windows 7 64位!

+0

您可以通过按Control + K而不是使用反引号来重新格式化它。 –

+0

这是一个很好的答案!有没有办法将这些选项设置为默认持续在不同的R会话? –

2

与UseR(原始问题)完全相同的问题,我也使用Windows 7.我尝试了所有建议的解决方案,他们没有工作。

我解决了这个问题做如下:

  1. 使用,而不是[R控制台RStudio。

  2. 实现R的版本(从3.1.0到3.1.1),以便库RCurl在其上运行OK。 (我现在使用的是R3.1.1 32bit,虽然我的系统是64位)。

  3. 我将URL地址键入为https(安全连接),并使用“/”而不是反斜杠“\”。

  4. 设置方法=“自动”。

它现在适用于我。您应该看到以下消息:

内容类型'text/csv;字符集= UTF-8' 长度9294字节 打开URL 通过

9

下载9294这里是为十一月的2014年。我发现,设置method='curl'奏效了,我(而method='auto',没有)的更新。

例如:

# does not work 
download.file(url='https://s3.amazonaws.com/tripdata/201307-citibike-tripdata.zip', 
       destfile='localfile.zip') 

# does not work. this appears to be the default anyway 
download.file(url='https://s3.amazonaws.com/tripdata/201307-citibike-tripdata.zip', 
       destfile='localfile.zip', method='auto') 

# works! 
download.file(url='https://s3.amazonaws.com/tripdata/201307-citibike-tripdata.zip', 
       destfile='localfile.zip', method='curl') 
+0

我没有找到卷曲。 –

+0

也许你的系统没有卷曲。至少在Mac OS上,你可以在R中运行'system('curl -V')''(必须是大写'V')来检查你的卷曲版本 – arvi1000

+0

https://lehd.ces.census.gov/data/lodes /LODES7/ut/wac/ut_wac_S000_JT00_2013.csv.gz #不为我工作 install.packages( “RCurl”) 库(RCurl) download.file(URL =的“https://s3.amazonaws。 com/tripdata/201307-citibike-tripdata.zip', destfile ='localfile.zip',method ='curl') #-------导致的错误-------- 警告消息: 1:运行命令'curl“https://s3.amazonaws.com/tripdata/201307-citibike-tripdata.zip”-o“localfile.zip”'有状态127 2:在download.file(url = “https://s3.amazonaws.com/tripdata/201307-citibike-tripdata.zip”,:dow nload具有非零退出状态 – Mox

1

提供卷曲包作为替代,我从联机数据库提取大型文件时发现可靠。在最近的一个项目中,我不得不从一个在线数据库下载120个文件,发现它只有一半的传输时间,并且比download.file更可靠。

#install.packages("curl") 
library(curl) 
#install.packages("RCurl") 
library(RCurl) 

ptm <- proc.time() 
URL <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv" 
x <- getURL(URL) 
proc.time() - ptm 
ptm 

ptm1 <- proc.time() 
curl_download(url =URL ,destfile="TEST.CSV",quiet=FALSE, mode="wb") 
proc.time() - ptm1 
ptm1 

ptm2 <- proc.time() 
y = download.file(URL, destfile = "./data/data.csv", method="curl") 
proc.time() - ptm2 
ptm2 

在这种情况下,您的网址的粗略计时显示传输时间没有一致的差异。在我的应用程序中,通过在脚本中使用curl_download从网站选择并下载120个文件,可将传输时间从每个文件2000秒减少到1000秒,并将120个文件中的可靠性从50%提高到2个故障。这个脚本发布在我之前问过的问题的答案中,请看。

0

尝试重文件

library(data.table) 
URL <- "http://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv" 
x <- fread(URL)