重定向站点上的Rvest循环中断

重定向站点上的Rvest循环中断,r,for-loop,web-scraping,vectorization,rvest,R,For Loop,Web Scraping,Vectorization,Rvest,我的情况:我有一个很长(20k行)的URL列表,我需要从中提取特定的数据元素进行分析。出于本例的目的,我正在寻找一个名为“sol num”的特定字段,该字段包含招标编号。使用以下功能,我可以获取FedBizOpps上列出的任何采购的招标编号: require(rvest) require(magrittr) fetchSolNum<-function(URL){ URL<-as.character(URL) solNum<-html(URL)%>% htm

我的情况:我有一个很长(20k行)的URL列表,我需要从中提取特定的数据元素进行分析。出于本例的目的,我正在寻找一个名为“sol num”的特定字段,该字段包含招标编号。使用以下功能,我可以获取FedBizOpps上列出的任何采购的招标编号:

require(rvest)
require(magrittr)
fetchSolNum<-function(URL){
  URL<-as.character(URL)
  solNum<-html(URL)%>%
    html_node(".sol-num")%>%
    html_text()
}
运行代码当前会为前五行存储值,然后返回以下错误:

 Error in xml_apply(x, XML::xmlValue, ..., .type = character(1)) : 
  Unknown input of class: NULL 
经过进一步调查,我发现问题可能在于列表中的这个URL进入了一种消除歧义的页面,因为有两次采购使用了这个URL

考虑到我的完整列表有20k行,我没有时间去清理所有无效URL的列表。有没有办法让我的当前函数只为URL无效或类似的行插入NA值?我怎样才能使它不因这个错误而中断


另外,通读一遍告诉我,将此操作作为向量化函数而不是循环运行可能更快、更高效。有人能告诉我在我的情况下会是什么样子吗?

可能只是一个
tryCatch()
可以在这里捕捉错误并给出NA。至于矢量化,我怀疑你会看到任何真正的收益。阅读一个网站需要一段时间(有时一两秒钟)。有两万人,这需要一些时间。一定要看看Hadley关于异常和调试的章节,并设置一些代码检查,这样它就不会在运行4个小时后爆炸

raw$solNum<-0

j=1
for (i in list){
  raw$solNum[j]<-fetchSolNum(i)
  j=j+1
}   
 Error in xml_apply(x, XML::xmlValue, ..., .type = character(1)) : 
  Unknown input of class: NULL