6

Вопрос по r – Как оптимизировать очистку с помощью getURL () в R

Я пытаюсь вычеркнуть все законопроекты с двух страниц на сайте нижней палаты французского парламента. Страницы охватывают 2002-2012 годы и представляют менее 1000 счетов каждая.

Для этого я ломаюgetURL через этот цикл:

b <- "http://www.assemblee-nationale.fr" # base
l <- c("12","13") # legislature id

lapply(l, FUN = function(x) {
  print(data <- paste(b, x, "documents/index-dossier.asp", sep = "/"))

  # scrape
  data <- getURL(data); data <- readLines(tc <- textConnection(data)); close(tc)
  data <- unlist(str_extract_all(data, "dossiers/[[:alnum:]_-]+.asp"))
  data <- paste(b, x, data, sep = "/")
  data <- getURL(data)
  write.table(data,file=n <- paste("raw_an",x,".txt",sep="")); str(n)
})

Есть ли способ оптимизироватьgetURL() функционировать здесь? Я не могу использовать одновременную загрузку, передавasync=TRUE опция, которая дает мне одну и ту же ошибку каждый раз:

Error in function (type, msg, asError = TRUE)  : 
Failed to connect to 0.0.0.12: No route to host

Есть идеи? Спасибо!

  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit ExceededmclapplyError: User Rate Limit ExceededXMLError: User Rate Limit ExceededgetURLError: User Rate Limit ExceededhtmlParse?

    от Fr.
  • Error: User Rate Limit ExceededcurlError: User Rate Limit Exceeded

    от Fr.
  • Error: User Rate Limit Exceeded

    от Fr.
  • Error: User Rate Limit Exceeded

    от Fr.
  • Хорошо. Ну, я не могу измениться к тому, какgetURL() работает до сих пор.

    от Fr.
  • async=TRUE это уже значение по умолчанию, если вы даете несколько URL-адресов - но открытие более 500 одновременных подключений к одному и тому же веб-сайту может быть не очень хорошей идеей ...

    от Vincent Zoonekynd
  • 1

    Попробуйте mclapply {multicore} вместо lapply.

    "mclapply is a parallelized version of lapply, it returns a list of the same length as X, each element of which is the result of applying FUN to the corresponding element of X." (http://www.rforge.net/doc/packages/multicore/mclapply.html)

    Если это не сработает, вы можете получить более высокую производительность, используяXML пакет. Такие функции, как xmlTreeParse, используют асинхронный вызов.

    "Note that xmlTreeParse does allow a hybrid style of processing that allows us to apply handlers to nodes in the tree as they are being converted to R objects. This is a style of event-driven or asynchronous calling." (http://www.inside-r.org/packages/cran/XML/docs/xmlEventParse)

  • -4

    Зачем использовать R? Для больших скребковых работ вам лучше использов

    ать что-то уже разработанное для этой задачи. У меня были хорошие результаты благодаря дополнению браузера Down Them All. Просто скажите ему, с чего начать, как глубоко зайти, какие шаблоны следовать и куда вывести дамп HTML.

    Затем используйте R для чтения данных из файлов HTML.

    Преимущества огромны - эти надстройки разработаны специально для этой задачи, поэтому они будут выполнять несколько загрузок (контролируемых вами), они будут отправлять правильные заголовки, поэтому ваш следующий вопрос не будет «как установить строку агента пользователя» с RCurl? ', и они могут справиться с повторной попыткой, когда некоторые из загрузок не удаются, что они неизбежно делают.

    Конечно, недостаток состоит в том, что вы не можете легко запустить этот процесс автоматически, и в этом случае вам, возможно, будет лучше использовать curl. в командной строке или какой-либо другой утилите зеркального отображения командной строки.

    Честно говоря, у вас есть дела поважнее, чем писать код сайта на R ...