我如何在 R 中关注 url 的任何重定向?

How can I follow any redirections of a url in R?

假设我有以下 url:

http://linkinghub.elsevier.com/retrieve/pii/S1755534516300379

在我的标准桌面浏览器中输入这个时,我被重定向到:

http://www.sciencedirect.com/science/article/pii/S1755534516300379?via%3Dihub

但是,我无法在 R 中实现它。我尝试了包 httr 和 RCurl。在httr的文档中,它说函数GET使用如下:

library(httr)
GET("http://linkinghub.elsevier.com/retrieve/pii/S1755534516300379")

应该导致实际使用的 url (在任何重定向之后)。但是当调用 url:

GET("http://linkinghub.elsevier.com/retrieve/pii/S1755534516300379")$url

我没有得到最终的重定向。非常感谢您的帮助!

此站点的重定向适用于 javascript,不适用于 http。因此,除非您解释下载文档的内容,否则重定向将不起作用。

如果您想从同一站点解析许多文档,您可以直接从文档解析重定向 url。

如果你想用不同的重定向机制解析许多不同的站点,你将需要一些库来实际加载站点并运行 javascript,例如 RSelenium.

为了将来参考,这里是我编写的一个小代码片段,用于使用 HEAD(而不是 GET,因此不会下载超过需要的内容)进行重定向。它不适用于手头的问题,但可能会在将来帮助人们(使用更简单的场景)。

# FUNCTIONS
url_after_redirect_1 <- function(url) {
  library(httr)
  a <- HEAD(url)
  # headers(a)
  (a$all_headers[[2]])$headers$location  
}
url_after_redirect <- Vectorize(url_after_redirect_1)