Я новичок в R, но что-то вроде следующего, где вы определяете функцию для извлечения информации о строке в виде фрейма данных из данного URL.Зацикливайтесь на том, сколько страниц вы хотите вызвать, вызывая функцию и объединяя возвращенные dfs в один большой df.Поскольку ноды не всегда имеют одинаковую длину, например, не во всех листингах есть телефонный номер, вам нужно проверить, присутствует ли элемент в цикле над строками.Я использую метод в ответе alistaire (+ к нему)
Я использую селекторы css, а не xpath.Вы можете прочитать о них здесь .
Учитывая количество возможных страниц, которые я хотел бы изучить, используя сеанс http.Вы получаете эффективность повторного использования соединения.Я использую их на других языках;из быстрого Google, кажется, R обеспечивает это, например, с html_session .
Я бы приветствовал предложения по улучшению и любые правки для исправления отступа.Я учусь на ходу.
library(rvest)
library(magrittr)
library(purrr)
url <- "https://channel9.msdn.com/Events/useR-international-R-User-conferences/useR-International-R-User-2017-Conference?sort=status&direction=desc&page="
get_listings <- function(url){
df <- read_html(url) %>%
html_nodes('.views-row') %>%
map_df(~list(
title = html_node(.x, '.service-card__title a')%>% html_text(),
location = trimws(gsub('\n', ' ',html_text(html_node(.x, '.service-card__address')))) %>%
{if(length(.) == 0) NA else .},
telephone = html_node(.x, '.service-card__phone') %>% html_text() %>%
{if(length(.) == 0) NA else .}
)
)
return(df)
}
pages_to_loop = 2
for(i in seq(1, pages_to_loop)){
new_url <- paste0(url, i, sep= '')
if(i==1){
df <- get_listings(new_url)
} else {
new_df <- get_listings(new_url)
df <- rbind(df, new_df)
}
}