假设我有以下网址:
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
我没有得到最终的重定向。我非常感谢你的帮助!
答案 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)