使用XML包中的readHTMLtable来搜索站点,不确定的错误消息

时间:2012-02-22 22:36:54

标签: r

我正在使用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个page会产生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的网址。

但是,由于列表中的大量页面导致此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语句检查这些页面并跳过那些导致错误的页面?

1 个答案:

答案 0 :(得分:3)

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

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