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

时间:2019-07-18 11:42:48

标签: r rcurl httr xml2

我需要抓取一些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))

有什么想法要前进吗?

1 个答案:

答案 0 :(得分:1)

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

所以你可以做

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

更好的是,您可以保存GET请求的结果并处理它的content。这样,无论如何您只需要一个请求。如果有错误,请跳过该错误,否则将处理结果(例如,使用xml2或您使用的任何方法)