Запрос на улучшение кода для загрузки последовательности URL-адресов

#r #rcurl

#r #rcurl

Вопрос:

в файле у меня есть таблица из 23 772 URL-адресов, которые мне нужно загрузить. В приведенном ниже коде это представлено dwsites . Из-за ограничений сервера я могу загружать только блок из 300 сайтов одновременно. Я выполнил эту задачу с помощью приведенного ниже кода (это отрывок из фактического кода), но я хочу знать способ получше.

Можете ли вы предложить какие-либо предложения?

Спасибо.

 dwsites <- data.frame(sites = c(1:23772), url = rep("url", 23772))

dwsitessub <- dwsites[1:300,] # this is the part that I would like to change
curl = getCurlHandle()
pagesnew = list()
for(u in strpatnew) {pagesnew[[u]] = getURLContent(u, curl = curl)}
lapply(seq_along(strpatternew), function(u) cat(pagesnew[[u]], file = file.path("filepath", paste0(strpatternew[[u]], sep = ""))))

dwsitessub <- dwsites[301:459,]
curl = getCurlHandle()
pagesnew = list()
for(u in strpatnew) {pagesnew[[u]] = getURLContent(u, curl = curl)}
lapply(seq_along(strpatternew), function(u) cat(pagesnew[[u]], file = file.path("filepath", paste0(strpatternew[[u]], sep = ""))))

...

dwsitessub <- 23501:nrow(dwsites)
curl = getCurlHandle()
pagesnew = list()
for(u in strpatnew) {pagesnew[[u]] = getURLContent(u, curl = curl)}
lapply(seq_along(strpatternew), function(u) cat(pagesnew[[u]], file = file.path("filepath", paste0(strpatternew[[u]], sep = ""))))
  

Комментарии:

1. Вы пробовали что-то вроде getURIAsynchronous(uris, maxconnects=200) . Это должно загружать файлы асинхронно и до ограничения количества подключений. Это означает, что у вас будет только один вызов getURIAsynchronous со всеми URL-адресами.

2. Или действительно похоже, что вы хотите установить опцию CURLMOPT_MAX_TOTAL_CONNECTIONS , но я не уверен, что у RCurl есть интерфейс для этого.

3. На самом деле, эта опция появилась в версии 7.30.0, и RCurl, похоже, использует 7.19.7. Так что, возможно, это было плохое предложение. Извините.