在R中捕获重定向的URL

时间:2018-03-23 17:30:57

标签: r curl post url-redirection httr

假设我有一个R脚本和一长串URL(100k +),捕获最终重定向URL的最有效方法是什么?

例如:如果你ping" www.someurl.com"并重定向到" www.someurl.com/homepage"然后我想将其记录到数据框中。

我尝试使用httr的HEAD功能,但似乎没有得到我想要的东西,即:

getCanonicalURLs <- function(url) {
 canonicalURL <- HEAD(url)
}

urlRedirects <- lapply(as.character(urlList), getCanonicalURLs)

2 个答案:

答案 0 :(得分:0)

我认为你可以选择base::curlGetHeaders()

curlGetHeaders("www.ard.de")
 [1] "HTTP/1.1 301 Moved Permanently\r\n"                                      
 [2] "Server: Apache\r\n"                                                      
 [3] "Location: http://www.ard.de/home/ard/ARD_Startseite/21920/index.html\r\n"
 [4] "Content-Length: 328\r\n"
 ...   

然后只需获取以&#34;位置&#34;。

开头的元素
stringr::str_extract(grep(curlGetHeaders("www.ard.de"), pattern = "Location", value = T), pattern = "http://.*")

答案 1 :(得分:0)

这是一个检查 HTTP 状态 (=200) 并返回重定向网址的函数。我想要一些与 dplyr::mutate 一起工作的东西,而这个函数可以做到这一点。

getCanonicalURLs <- function(urls) 
{
  op <- rep(NA, length(urls))
  for(i in 1:length(urls))
  {op[i] <- tryCatch({if(crul::ok(urls[i], info = F)) {httr::HEAD(urls[i])$url} else {NA} }
                     , error = function(e){NA}
                     , warning = function(w){NA})}
  rm(i)
  return(op)
}