假设我有一个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)
答案 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)
}