检查 url 是否存在时识别转发
Recognize forwarding when checking if url exists
我有一些 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))
知道如何前进吗?
那是因为这个服务器 returns 200 OK
当你发送一个 HEAD 请求时(就像 url.exists()
和 http_error()
那样)。当发送 GET 请求时,您会收到 404 NOT FOUND
。
所以你可以做到
httr::http_error(httr::GET(url))
#> TRUE
更好的是,您可以保存 GET 请求的结果并处理它 content
。这样您在任何情况下都只需要一个请求。如果有错误你跳过它,否则你处理结果(例如使用 xml2
或任何你使用的)
我有一些 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))
知道如何前进吗?
那是因为这个服务器 returns 200 OK
当你发送一个 HEAD 请求时(就像 url.exists()
和 http_error()
那样)。当发送 GET 请求时,您会收到 404 NOT FOUND
。
所以你可以做到
httr::http_error(httr::GET(url))
#> TRUE
更好的是,您可以保存 GET 请求的结果并处理它 content
。这样您在任何情况下都只需要一个请求。如果有错误你跳过它,否则你处理结果(例如使用 xml2
或任何你使用的)