Скачивание больших файлов с помощью R/RCurl
Я вижу, что многие примеры загрузки двоичных файлов с RCurl похожи на такие:
library("RCurl")
curl = getCurlHandle()
bfile=getBinaryURL (
"http://www.example.com/bfile.zip",
curl= curl,
progressfunction = function(down, up) {print(down)}, noprogress = FALSE
)
writeBin(bfile, "bfile.zip")
rm(curl, bfile)
Если загрузка очень велика, я полагаю, что лучше писать ее одновременно с носителем, а не извлекать все в памяти.
В документации RCURL есть несколько примеров для получения файлов кусками и манипулирования ими по мере их загрузки, но, похоже, все они относятся к текстовым фрагментам.
Можете ли вы привести рабочий пример?
UPDATE
Пользователь предлагает использовать R native download file
с mode = 'wb'
для двоичных файлов.
Во многих случаях нативная функция является жизнеспособной альтернативой, но существует множество прецедентов, в которых эта нативная функция не подходит (https, cookie, формы и т.д.), и именно по этой причине RCurl существует.
Ответы
Ответ 1
Это рабочий пример:
library(RCurl)
#
f = CFILE("bfile.zip", mode="wb")
curlPerform(url = "http://www.example.com/bfile.zip", writedata = [email protected])
close(f)
Он будет загружен прямо в файл. Возвращаемое значение будет (вместо загруженных данных) состоянием запроса (0, если ошибки не возникнут).
Упоминание CFILE
немного краткое в руководстве RCURL. Надеюсь, в будущем он будет содержать более подробную информацию/примеры.
Для вашего удобства один и тот же код упакован как функция (и с индикатором выполнения):
bdown=function(url, file){
library('RCurl')
f = CFILE(file, mode="wb")
a = curlPerform(url = url, writedata = [email protected], noprogress=FALSE)
close(f)
return(a)
}
## ...and now just give remote and local paths
ret = bdown("http://www.example.com/bfile.zip", "path/to/bfile.zip")
Ответ 2
um.. use mode = 'wb':).. запустите это и следуйте вместе с моими комментариями.
# create a temporary file and a temporary directory on your local disk
tf <- tempfile()
td <- tempdir()
# run the download file function, download as binary.. save the result to the temporary file
download.file(
"http://sourceforge.net/projects/peazip/files/4.8/peazip_portable-4.8.WINDOWS.zip/download",
tf ,
mode = 'wb'
)
# unzip the files to the temporary directory
files <- unzip( tf , exdir = td )
# here are your files
files