it-swarm.com.de

Herunterladen einer Datei von HTTPS mit download.file ()

Ich möchte Online-Daten mit Hilfe von download.file() in R einlesen, wie unten gezeigt.

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

Jemand schlug mir vor, die Zeile setInternet2(TRUE) hinzuzufügen, aber es funktioniert immer noch nicht.

Der Fehler, den ich erhalte, ist:

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

Schätze deine Hilfe.

27
useR

Das RCurl-Paket könnte am einfachsten sein. Installieren Sie das Paket und versuchen Sie Folgendes:

# 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")
39

Hier ist ein Update vom November 2014. Ich finde, dass die Einstellung method='curl' den Trick für mich gemacht hat (während method='auto' nicht).

Zum Beispiel:

# 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')
12
arvi1000

Ich bin mit dem folgenden Code erfolgreich:

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

Beachten Sie, dass ich das Protokoll von https in http geändert habe, da das erste Protokoll in R nicht unterstützt wird.

4
Baumann

Wenn Sie RCurl verwenden, erhalten Sie einen SSL-Fehler in der Funktion GetURL (). Setzen Sie dann diese Optionen vor GetURL (). Dadurch werden die CurlSSL-Einstellungen global festgelegt. 

Der erweiterte Code:

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)

Arbeitete für mich unter Windows 7 64-Bit mit R3.1.0!

4
user3762466

Hatte genau das gleiche Problem wie UseR (ursprüngliche Frage), ich verwende auch Windows 7. Ich habe alle vorgeschlagenen Lösungen ausprobiert und sie funktionierten nicht.

Ich habe das Problem folgendermaßen gelöst:

  1. Verwenden von RStudio anstelle von R-Konsole.

  2. Aktualisieren Sie die Version von R (von 3.1.0 auf 3.1.1), damit die Bibliothek RCurl in Ordnung läuft. (Ich benutze jetzt R3.1.1 32bit, obwohl mein System 64bit ist).

  3. Ich habe die URL-Adresse als https (sichere Verbindung) und mit / anstelle von Backslashes \\ eingegeben. 

  4. method = "auto" einstellen.

Es funktioniert jetzt für mich. Sie sollten die Nachricht sehen:

Content type 'text/csv; charset=utf-8' length 9294 bytes
opened URL
downloaded 9294 by
2
JeromeROD

Ich bot das curl-Paket als Alternative an, das ich beim Extrahieren großer Dateien aus einer Online-Datenbank als zuverlässig befunden habe. In einem kürzlich durchgeführten Projekt musste ich 120 Dateien aus einer Online-Datenbank herunterladen und fand die Hälfte der Übertragungszeiten für wesentlich zuverlässiger als 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

In diesem Fall zeigte das grobe Timing Ihrer URL keinen konsistenten Unterschied bei den Übertragungszeiten. Durch die Verwendung von curl_download in einem Skript zum Auswählen und Herunterladen von 120 Dateien von einer Website wurden meine Übertragungszeiten von 2000 Sekunden pro Datei auf 1000 Sekunden reduziert und die Zuverlässigkeit in 120 Dateien von 50% auf 2 Fehler erhöht. Das Skript ist in meiner Antwort auf eine Frage enthalten, die ich zuvor gestellt habe. 

2
user3838963

127 bedeutet Befehl nicht gefunden

In Ihrem Fall wurde der Curl-Befehl nicht gefunden. Das heißt, Curl wurde nicht gefunden.

Sie müssen CURL installieren/neu installieren. Das ist alles. Holen Sie sich die neueste Version für Ihr Betriebssystem von http://curl.haxx.se/download.html

Schließen Sie RStudio vor der Installation.

2
Muktadir

Versuchen Sie es mit schweren Dateien

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

Sie können globale Optionen einstellen und

options('download.file.method'='curl')
download.file(URL, destfile = "./data/data.csv", method="auto")

Zur Ausgabe siehe link- https://stat.ethz.ch/pipermail/bioconductor/2011-Februar/037723.html

0
akshat thakar