我正在使用一个循环函数来获取df
中的一些urls
并进行一些验证,比如:
for (i in 1:nrow(df)) {
webpage <- read_html(as.character(df[i,1]))
Sys.sleep(0.025)
validation <- webpage %>% html_nodes("a") %>% html_attr('href')
if (length(grep("bitstream",validation)>0)) {
df$text[[i]] <- "Valid"}
else {
df$text[[i]] <- "Invalid"}
}
问题是,如果url
是broken
,我会得到这样的错误消息:
Error in open.connection(x, "rb") : HTTP error 500
并且循环停止。有没有办法设置另一个if condition
,使其不会停止?
正如@hrbrmstr在评论中建议的那样,我使用了tryCatch
,但添加了一些小东西,这样效果会更好。使用next
语句中的valid_url
检查条件使循环重新开始。
for (i in 1:nrow(df)) {
valid_url <- TRUE
tryCatch({webpage <- read_html(as.character(df[i,1]))}, error=function(e) url_valido<<-FALSE)
if (!valid_url){ cat(" 14")
cat(paste(i," - Invalid URL","nStatus: ",
percent(i/nrow(df)),sep=""))
df$text[[i]] <- "Invalid URL"
next}
Sys.sleep(0.025)
teste <- webpage %>% html_nodes("a") %>% html_attr('href')
if (length(grep("bitstream",teste)>0)) {
df$texto[[i]] <- "Completo"}
else {
df$texto[[i]] <- "Incompleto"}
cat(" 14")
cat(paste(i," - ",df$texto[[i]],"nStatus: ",
percent(i/nrow(df)),sep=""))
}