Я написал функцию, которая перебирает URL-адреса и удаляет нужные мне данные с каждой страницы.
library(xml2)
library(rvest)
Ниже приведен вектор соответствующих URL:
tripadvisor_urls <- c()
for (n in seq(0, 80, 10)) {
url <- paste('https://www.tripadvisor.co.uk/Attraction_Review-g186306-d9756771-Reviews-or',n,
'-Suckerpunch_St_Albans-St_Albans_Hertfordshire_England.html', sep = "")
tripadvisor_urls <- c(tripadvisor_urls, url)
}
И вот эта функция, которую я написал:
all_pages <- function(x) {
id_v <- c()
rating_v <- c()
headline_quote_v <- c()
date_v <- c()
review_v <- c()
for (url in x) {
reviews <- url %>%
read_html() %>%
html_nodes("#REVIEWS .innerBubble")
id <- reviews %>%
html_node(".quote a") %>%
html_attr("id")
id_v <- c(id_v, id)
headline_quote <- reviews %>%
html_node(".quote span") %>%
html_text()
headline_quote_v <- c(headline_quote_v, headline_quote)
rating_wrong <- url %>%
read_html() %>%
html_nodes("#REVIEWS .ui_bubble_rating") %>%
as.character() %>%
substr(38,39) %>%
as.numeric()
rating <- rating_wrong/10
rating_v <- c(rating_v, rating)
date <- reviews %>%
html_node(".rating .ratingDate") %>%
html_attr("title") %>%
as.Date('%d %B %Y')
date_v <- c(date_v, date)
review <- reviews %>%
html_node(".entry .partial_entry") %>%
html_text()
review_v <- c(review_v, review)
}
tripadvisor <<- data.frame(id_v, headline_quote_v, rating_v, date_v, review_v)
}
all_pages(tripadvisor_urls)
Когда я смотрю насгенерированный фрейм данных, я вижу, что есть дубликаты:
duplicated(tripadvisor)
Что я сделал не так?Я предполагаю, что это как-то связано с постоянным добавлением новых элементов в мои векторы.Как лучше всего обойти это?
ПРИМЕЧАНИЕ. Я запросил разрешение у TripAdvisor, поэтому не нарушаю их условия обслуживания.