Вот мой взгляд на него:
### Load XML package, for 'htmlParse'
require(XML)
### Read in HTML contents, extract file names.
root <- 'http://cdo.ncdc.noaa.gov/qclcd_ascii/'
doc <- htmlParse(root)
fnames <- xpathSApply(doc, '//a[@href]', xmlValue)
### Keep only zip files, and create url paths to scrape.
fnames <- grep('zip$', fnames, value = T)
paths <- paste0(root, fnames)
Теперь, когда у вас есть вектор URL, и соответствующий файл-зовут в R, вы можете загрузить их на ваш жесткий диск. У вас есть два варианта. Вы можете скачать его серийно или параллельно.
### Download data in serial, saving to the current working directory.
mapply(download.file, url = paths, destfile = fnames)
### Download data in parallel, also saving to current working directory.
require(parallel)
cl <- makeCluster(detectCores())
clusterMap(cl, download.file, url = paths, destfile = fnames,
.scheduling = 'dynamic')
Если вы решили загрузить параллельно, я рекомендую, учитывая «динамические» планирования, что означает, что каждое ядро не придется ждать, пока другие закончить до начала своей следующей загрузки. Недостатком динамического планирования является добавленная коммуникационная накладная, но поскольку процесс загрузки файлов ~ 50 МБ не очень ресурсоемкий, будет стоить использовать эту опцию, если файлы загружаются со слегка изменяющимися скоростями.
Наконец, если вы хотите, чтобы также включать tar
файлы, а также, изменить регулярное выражение
fnames <- grep('(zip)|(gz)$', fnames, value = T)
Вы бы нужно на стороне сервера доступа поместить все в пакетном файле. Возможно, вы можете скачать с помощью одной из параллельных фреймворков, предлагаемых в R? –
Можем ли мы проголосовать, чтобы закрыть это? – mgriebe
да, я так думаю! благодаря! – ponyhd