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