检查 url 是否存在时识别转发

Recognize forwarding when checking if url exists

我有一些 URL 需要抓取。我不知道有多少。这就是为什么我只是遍历它们。

不幸的是,当页面不存在时 xml2::read.html 收到一个错误,中断了我的循环。当我使用 Rcurl::url.existshttr::http_error 检查 HTML 是否存在时,我没有得到页面不存在的指示,因为我被转发了。

> url <- "https://zoek.officielebekendmakingen.nl/h-tk-20152016-1-6"
> xml2::read_html(url)
Error in open.connection(x, "rb") : HTTP error 404.
> url.exists(url)
[1] TRUE
> httr::http_error(url)
[1] FALSE

URL 应该会产生一个错误(它对 xml2 会产生错误)但是 RCurl 和 httr 都没有得到该站点不存在的指示。

我对 RCurl 使用以下选项

options(RCurlOptions = list(verbose = FALSE,
                            followlocation = FALSE,
                            autoreferer = FALSE,
                            nosignal = TRUE))

知道如何前进吗?

那是因为这个服务器 returns 200 OK 当你发送一个 HEAD 请求时(就像 url.exists()http_error() 那样)。当发送 GET 请求时,您会收到 404 NOT FOUND

所以你可以做到

httr::http_error(httr::GET(url))
#> TRUE

更好的是,您可以保存 GET 请求的结果并处理它 content。这样您在任何情况下都只需要一个请求。如果有错误你跳过它,否则你处理结果(例如使用 xml2 或任何你使用的)