我需要抓取一些URL。我不知道有多少。这就是为什么我只是遍历它们。
不幸的是,当页面不存在时,xml2::read.html
会收到一个错误,该错误会中断我的循环。当我使用Rcurl::url.exists
或httr::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))
有什么想法要前进吗?
答案 0 :(得分:1)
这是因为当您发送HEAD请求时,该服务器将返回200 OK
(就像url.exists()
和http_error()
一样)。发送GET请求时,您会收到404 NOT FOUND
。
所以你可以做
httr::http_error(httr::GET(url))
#> TRUE
更好的是,您可以保存GET请求的结果并处理它的content
。这样,无论如何您只需要一个请求。如果有错误,请跳过该错误,否则将处理结果(例如,使用xml2
或您使用的任何方法)