#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. Так что, возможно, это было плохое предложение. Извините.