Я использую пакет XML
для очистки списка сайтов. В частности, я беру рейтинги из списка кандидатов на следующем сайте: voicemart .
Страницы кандидатов располагаются в порядке номеров от 1 и выше. Моя первая попытка отобрать первые 50 кандидатов выглядит следующим образом
library(xml)
library(plyr)
url <- paste("http://www.votesmart.org/candidate/evaluations/", 1:50 , sep = "")
res <- llply(url, function(i) readHTMLtable(i))
Но есть пара проблем - например, 25-я страница в этой последовательности генерирует ошибку 404 "url not found"
. Я решил эту проблему, сначала получив фрейм данных о количестве XML
ошибок для каждой страницы в последовательности, а затем исключив страницы с единственной ошибкой. В частности
errors <- ldply(url, function(i) length(getXMLErrors(i)))
url2 <- url[which(errors$V1 > 1)]
res2 <- llply(url2, function(i) readHTMLTable(i))
Таким образом, я исключил 404 генерирующих URL из этого списка.
Однако все еще существует проблема, вызванная многочисленными страницами в списке, которые приводят к сбою этих команд llply. Ниже приведен пример
readHTMLTable("http://www.votesmart.org/candidate/evaluations/6")
, что приводит к ошибке
Error in seq.default(length = max(numEls)) :
length must be non-negative number
In addition: Warning message:
In max(numEls) : no non-missing arguments to max; returning -Inf
Однако эти страницы генерируют то же количество ошибок из команды getXMLErrors, что и рабочие страницы, поэтому я не могу различить их на этом фронте.
Мой вопрос - что означает эта ошибка, и есть ли способ получить readHTMLTable, чтобы вернуть пустой список для этих страниц, а не ошибку? В противном случае, могу ли я в своем заявлении llply проверить эти страницы и пропустить те, которые приводят к ошибке?