web-dev-qa-db-fra.com

Téléchargez un fichier à partir de HTTPS en utilisant download.file ()

Je voudrais lire les données en ligne à R en utilisant download.file() comme indiqué ci-dessous.

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

Quelqu'un m'a suggéré d'ajouter la ligne setInternet2(TRUE), mais cela ne fonctionne toujours pas.

L'erreur que je reçois est:

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

Apprécier ton aide.

27
useR

Il serait peut-être plus simple d'essayer le paquet RCurl. Installez le paquet et essayez ce qui suit:

# 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

Voici une mise à jour de novembre 2014. Je trouve que le réglage de method='curl' a fait l'affaire pour moi (alors que method='auto' ne le fait pas).

Par exemple:

# 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

J'ai réussi avec le code suivant:

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

Notez que j'ai changé le protocole de https à http , car le premier ne semble pas être pris en charge par R.

4
Baumann

Si vous utilisez RCurl, vous obtenez une erreur SSL sur la fonction GetURL () puis définissez ces options avant GetURL (). Cela définira les paramètres CurlSSL globalement. 

Le code étendu:

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)

Travaillé pour moi sur Windows 7 64 bits avec R3.1.0!

4
user3762466

J'avais exactement le même problème que UseR (question initiale), j'utilise également Windows 7. J'ai essayé toutes les solutions proposées et elles ne fonctionnaient pas.

J'ai résolu le problème en procédant comme suit:

  1. Utiliser RStudio au lieu de la console R.

  2. Actualisation de la version de R (de 3.1.0 à 3.1.1) pour que la bibliothèque RCurl s'exécute correctement. (J'utilise maintenant R3.1.1 32 bits alors que mon système est 64 bits).

  3. J'ai tapé l'adresse URL en tant que https (connexion sécurisée) et avec / au lieu de barres obliques inverses \\

  4. Paramètre method = "auto".

Ça marche pour moi maintenant. Vous devriez voir le message:

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

En proposant le paquet curl comme solution de rechange qui s’est avérée fiable lors de l’extraction de gros fichiers d’une base de données en ligne. Dans un projet récent, j'ai dû télécharger 120 fichiers à partir d'une base de données en ligne et je l'ai trouvée à la moitié du temps de transfert et pour être beaucoup plus fiable que 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

Dans ce cas, le timing approximatif de votre URL ne montre aucune différence cohérente dans les temps de transfert. Dans mon application, l’utilisation de curl_download dans un script pour sélectionner et télécharger 120 fichiers d’un site Web a diminué le temps de transfert de 2 000 secondes à 1 000 secondes et augmenté la fiabilité de 50% à 2 échecs sur 120 fichiers. Le script est posté dans ma réponse à une question que j'ai posée plus tôt, voir. 

2
user3838963

127 signifie que la commande n'est pas trouvée

Dans votre cas, la commande curl n'a pas été trouvée. Par conséquent, cela signifie que curl n'a pas été trouvé.

Vous devez installer/réinstaller CURL. C'est tout. Obtenez la dernière version pour votre système d'exploitation de http://curl.haxx.se/download.html

Fermez RStudio avant l'installation.

2
Muktadir

Essayez de suivre avec des fichiers lourds

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

Vous pouvez définir des options globales et essayer

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

Pour les numéros, voir link- https://stat.ethz.ch/pipermail/bioconductor/2011-February/037723.html

0
akshat thakar