我在处理for循环中的错误时遇到了一个问题。
在下面的代码中,我想要抓取数据表并将其集成为一个数据帧。
在web抓取过程中,某些地址链接不起作用,web抓取会在抓取过程中停止和结束。(错误位置: doc = read_html(i,encoding = 'UTF-8') )
我如何继续下一步的抓取过程并完成对整个向量的迭代,而忽略错误链接?
fdata = data.frame()
n = 1
for (i in data$address) {
doc = read_html(i, encoding = 'UTF-8')
dtable = doc %>%
html_table()
fdata = bind_rows(fdata, dtable)
len = length(data$address)
print(n/len*100)
n = n + 1
}发布于 2019-01-21 19:40:59
只需添加一个结合了if error next的try就可以了,例如
fdata = data.frame()
n = 1
for (i in data$address) {
doc = try(read_html(i, encoding = 'UTF-8'), silent = TRUE)
if (any(class(doc) == 'try-error')) next
dtable = doc %>%
html_table()
fdata = bind_rows(fdata, dtable)
len = length(data$address)
print(n/len*100)
n = n + 1
}发布于 2019-01-21 20:18:50
您还可以使用purrr中的possibly在出错时返回NA,构建一个函数来搜索表,然后使用map_dfr进行迭代和绑定
library(purrr)
library(rvest)
read_possible <- posibly(read_html, NA)
scrape_table <- function(address) {
doc <- read_possible(address, encoding = 'UTF-8')
if (is.na(doc)) {
NA
} else {
html_table(doc)
}
}
map_dfr(data$address, scrape_table)https://stackoverflow.com/questions/54289091
复制相似问题