使用readHTMLtable从XML包中抓取站点,不确定的错误消息



我正在使用XML包来抓取网站列表。具体来说,我在以下网站上从候选人名单中获取评分:votesmart。

候选人的页面按数字顺序排列,从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语句检查这些页面并跳过那些导致错误的页面?

为什么不做一些简单的错误处理?

res <- llply(url, function(i) try(readHTMLTable(i)))

最新更新