gpt4 book ai didi

r - 处理 read_html 对空网页的错误响应

转载 作者:行者123 更新时间:2023-12-03 05:41:40 26 4
gpt4 key购买 nike

尝试抓取网页标题,但在名为“tweg.com”的网站上遇到问题

library(httr)
library(rvest)
page.url <- "tweg.com"
page.get <- GET(page.url) # from httr
pg <- read_html(page.get) # from rvest
page.title <- html_nodes(pg, "title") %>%
html_text() # from rvest

read_html 停止并显示错误消息:“错误:无法解析文本”。查看page.get$content,发现它是空的(raw(0))。

当然,可以编写一个简单的检查来考虑这一点并避免使用 read_html 进行解析。然而,感觉更优雅的解决方案是从 read_html 获取一些内容,然后基于它返回一个空页面标题(即“”)。尝试将“选项”传递给 read_html,例如 RECOVER、NOERROR 和 NOBLANKS,但没有成功。有什么想法如何从 read_html 获取“空页”响应吗?

最佳答案

您可以使用 tryCatch 捕获错误并返回特定内容(只需 try(read_html('http://tweg.com'),silent = TRUE)如果您只想返回错误并继续,则可以使用)。您需要向 tryCatch 传递一个函数,用于捕获错误时返回的内容,您可以按照自己的喜好构造该函数。

library(rvest)


tryCatch(read_html('http://tweg.com'),
error = function(e){'empty page'}) # just return "empty page"
#> [1] "empty page"

tryCatch(read_html('http://tweg.com'),
error = function(e){list(result = 'empty page',
error = e)}) # return error too
#> $result
#> [1] "empty page"
#>
#> $error
#> <Rcpp::exception in eval(substitute(expr), envir, enclos): Failed to parse text>

purrr 包还包含两个函数 possiblesafely,它们执行相同的操作,但接受更灵活的函数定义。请注意,它们是副词,因此返回一个仍必须调用的函数,这就是为什么 URL 在调用后放在括号中的原因。

library(purrr)

possibly(read_html, 'empty page')('http://tweg.com')
#> [1] "empty page"

safely(read_html, 'empty page')('http://tweg.com')
#> $result
#> [1] "empty page"
#>
#> $error
#> <Rcpp::exception in eval(substitute(expr), envir, enclos): Failed to parse text>

典型用法是将结果函数映射到 URL 向量:

c('http://tweg.com', 'http://wikipedia.org') %>% 
map(safely(read_html, 'empty page'))
#> [[1]]
#> [[1]]$result
#> [1] "empty page"
#>
#> [[1]]$error
#> <Rcpp::exception in eval(substitute(expr), envir, enclos): Failed to parse text>
#>
#>
#> [[2]]
#> [[2]]$result
#> {xml_document}
#> <html lang="mul" dir="ltr" class="no-js">
#> [1] <head>\n <meta charset="utf-8"/>\n <title>Wikipedia</title>\n <me ...
#> [2] <body id="www-wikipedia-org">\n<h1 class="central-textlogo" style="f ...
#>
#> [[2]]$error
#> NULL

关于r - 处理 read_html 对空网页的错误响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41094157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com