如何在R中跟踪网址的任何重定向?

时间:2017-10-20 08:06:51

标签: r rcurl httr

假设我有以下网址:

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")

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

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

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

2 个答案:

答案 0 :(得分:3)

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

如果要从同一站点解析许多文档,可以直接从文档中解析重定向URL。

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

答案 1 :(得分:2)

为了将来参考,这是我编写的一些小代码段,用于使用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)