提问人:Will Hanley 提问时间:8/17/2022 更新时间:8/17/2022 访问量:43
跟踪导致“'xml_find_all'没有适用方法”错误的 HTML 页面
tracking down the html page causing "no applicable method for 'xml_find_all'" error
问:
我有一个包含 30,000 个 html 页面的文件夹,我正在使用此 R 函数进行解析:
extract <- function(x){
file <- read_html(x)
filename <- x %>% gsub("~/files/index.html", "", .)
mapscript_vector <- file %>%
html_nodes("#mapscript") %>%
html_text() %>%
str_match_all("markers \\= \\[\n\n\t *\\[ ?\"(.+)\", \"(\\w+)\", ([[:digit:]\\.\\-]+), ([[:digit:]\\.\\-]+), \"(\\d+)\", (\\d+)") %>%
extract2(1) %>%
extract(2:7)
mapscript_full_vector <- c(mapscript_vector, filename)
}
result <- lapply(html_files, extract)
它在 30,000 个文件的子集上按预期工作。但我想某处有一两个坏文件,因为当我在整个集合上运行该函数时,我收到以下错误:
Error in UseMethod("xml_find_all") :
no applicable method for 'xml_find_all' applied to an object of class "xml_document"
我想我至少可以做三件事之一:
- 查找导致问题的文件
- 改进代码,使其也可以处理类“xml_document”的对象
- 获取代码以忽略问题文件并给我一个结果
我将不胜感激任何建议。
答:
1赞
dcsuka
8/17/2022
#1
您可以使用如下所示的文件名称来识别导致错误的文件的名称,以及它们导致的错误:tryCatch
extract <- function(x){
tryCatch(
{file <- read_html(x)
filename <- x %>% gsub("~/files/index.html", "", .)
mapscript_vector <- file %>%
html_nodes("#mapscript") %>%
html_text() %>%
str_match_all("markers \\= \\[\n\n\t *\\[ ?\"(.+)\", \"(\\w+)\", ([[:digit:]\\.\\-]+), ([[:digit:]\\.\\-]+), \"(\\d+)\", (\\d+)") %>%
extract2(1) %>%
extract(2:7)
mapscript_full_vector <- c(mapscript_vector, filename)},
error = function(e) {
print(e)
print(x)
})
}
result <- lapply(html_files[1:100], extract)
这种方法将使您了解错误发生的频率,以及它是否是您的一般功能(仅使用几个空文件)的问题。我会尝试只使用 100 个文件作为编码开始,如果没有错误,我会增加。
评论
0赞
Will Hanley
8/17/2022
我从上面的评论中找到了解决方案(其中一个文件是空的),但很感激了解,这将在下次出现难以找到的错误时对我有所帮助。谢谢。tryCatch
评论
xml_document
xml2::xml_find_all