В R сайт, читаемый с помощью read_html, перенаправляется. Как получить URL-адрес, на который он был перенаправлен?

this_page = read_html("https://apu.edu/athletics")

> this_page
{xml_document}
<html id="ctl00_html" lang="en" class=" index homepage">
[1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n<script>window.client_hostname = "athletics.apu.edu";window.server_name = "79077 ...
[2] <body>\n<div style="position: fixed; left: -10000px"><script src="//cdn.blueconic.net/azusa.js" async=""></script></div>\n<script>(function(i,s,o,g,r,a,m){i[ ...

хотя мы читаем https://apu.edu/athletics, он перенаправляет на athletics.apu.edu. Это верно как в браузере, так и в выводе this_page прямо здесь: <script>window.client_hostname = "athletics.apu.edu"; ...

Можно ли извлечь это значение из переменной this_page?

Изменить: все три лучших в настоящее время ответа (экоам, Дэвид, Аллан) работают, и все они занимают примерно одинаковое время (0,35 секунды). Я принял ответ с trace_redirects, потому что он предоставляет дополнительную информацию обо всех перенаправлениях ...


person Canovice    schedule 30.09.2020    source источник
comment
Не уверен, что rvest сможет это сделать. Это должно быть возможно при использовании selenium, см. это для начиная.   -  person David    schedule 30.09.2020
comment
Почему не просто read_html("https://athletics.apu.edu")?   -  person ekoam    schedule 30.09.2020
comment
@ekoam Мне предоставили длинный список URL-адресов. apu.edu/athletics предоставляется, а athletics.apu.edu - нет.   -  person Canovice    schedule 30.09.2020


Ответы (3)


Если вы хотите получить все перенаправления (на самом деле вы здесь дважды перенаправлены), вы можете использовать эту функцию:

trace_redirects <- function(url) {
  httr::GET(url)$all_headers %>%
    lapply(function(x) x$headers$location) %>%
    unlist() %>%
    unique()
}

Итак, вы можете:

trace_redirects("https://apu.edu/athletics")
#> [1] "https://www.apu.edu/athletics" "http://athletics.apu.edu"      
#> [3] "https://athletics.apu.edu/"
person Allan Cameron    schedule 30.09.2020

Если вы не против использовать для этого httr, просто:

httr::GET("https://apu.edu/athletics")[["url"]]

> httr::GET("https://apu.edu/athletics")[["url"]]
[1] "https://athletics.apu.edu/"
person ekoam    schedule 30.09.2020

Если вы вместо этого используете html_session(), он должен работать:

library(rvest)

url <- "https://apu.edu/athletics"
s <- html_session(url)
s
#> <session> https://athletics.apu.edu/
#>   Status: 200
#>   Type:   text/html; charset=utf-8
#>   Size:   221620

s$url
#> [1] "https://athletics.apu.edu/"
person David    schedule 30.09.2020
comment
это выглядит многообещающим - person Canovice; 30.09.2020