【发布时间】:2013-08-20 12:16:55
【问题描述】:
我有一个 URL 列表(足够大),我想检查它们的 HTML 代码是否有效。如果不是,我想知道像这个页面的结果一样的错误和警告的数量:http://validator.w3.org/
因此,我想通过 R 将我的 URL 提交到该网页,然后解析结果以获取我需要的信息。还有其他方法吗?
我找到了 RCurl 包,但我不确定如何去做。如有任何帮助,我将不胜感激。
提前致谢。
编辑:
我尝试了以下代码,这似乎可以完成这项工作,尽管由于某些未知原因我仍然无法处理一些 URL,我收到错误并且代码停止(因此我失去了一切)。
HTMLValid=foreach(i=1:nrow(allData), .combine='rbind') %dopar% {
library(RCurl)
library(XML)
url=paste("http://validator.w3.org/check?uri=",
as.character(allData$url[i]),
"&charset=%28detect+automatically%29&doctype=Inline&group=0#preparse_warnings",
sep="")
w = getURL(url,httpheader = c('User-Agent' = "Mozilla/5.0 (Windows NT 6.1; rv:23.0) Gecko/20100101 Firefox/23.0"))
doc <- htmlTreeParse(w, getDTD = F)
r=xmlRoot(doc)
text=r[["body"]][[2]][[4]][[1]][[1]][[2]][[1]]
errors=strsplit(toString.XMLNode(text),' ')[[1]][1]
warnings=strsplit(toString.XMLNode(text),' ')[[1]][3]
c(as.numeric(errors),as.numeric(warnings))
}
当页面在特定时间范围内没有响应时,我可能会收到错误消息。我该如何克服呢?有没有办法更快地完成这个过程?
【问题讨论】:
-
你可以试试
xmlSchemaValidatefromlibrary(XML)。 -
您可以指定foreach
.errorhandling='remove'选项以过滤掉错误并仅返回成功的任务结果。这样,您就可以避免在一些任务失败时丢失所有内容。 -
@SteveWeston 这样我将无法识别我没有得到结果的案例。或者也许我可以在结果中附加迭代器!!托马斯 我试试看!谢谢!!
-
@Thomas 我无法让它适用于已经保存在我电脑上的 HTML 文件。你有任何工作代码吗?
-
我从未真正尝试过用于 HTML(相对于其他 XML),所以我没有具体的建议。
标签: html r validation rcurl