【问题标题】:How can I follow any redirections of a url in R?如何在 R 中跟踪 URL 的任何重定向?
【发布时间】:2017-10-20 08:06:50
【问题描述】:

假设我有以下网址:

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的时候:

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

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

【问题讨论】:

    标签: r rcurl httr


    【解决方案1】:

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

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

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

    【讨论】:

    • @sanaut。非常感谢您的快速回复。我希望有一个不同的答案,但这完全有道理。也感谢您对 RSelenium 的提示。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-06-09
      • 2014-04-13
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 2021-06-13
      • 1970-01-01
      相关资源
      最近更新 更多