R: Проблема с селектором в веб-поиске нескольких страниц - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь получить баллы за просмотр веб-страниц на нескольких страницах, к сожалению, у меня возникают проблемы с селектором (я использовал SelectorGadget, но безуспешно).

У меня есть успех только для отдельных веб-сборов

library(rvest)
points <- read_html("https://www.winemag.com/buying-guide/lagar-de-bezana-2014-aluvion-ensamblaje-red-cachapoal-valley/")

points %>% 
  html_node(".rating") %>%
  html_text() 

[1] "93points"

Для многостраничных страниц результаты не являются реальными значениями:

library(rvest)

points <- lapply(paste0('https://www.winemag.com/?s=chile&search_type=all', 1:5),
                function(url){
                    url %>% read_html() %>% 
                        html_nodes(".rating") %>% 
                        html_text()
                })
points

[[1]]
[1] "93 Points" "92 Points" "92 Points" "92 Points" "92 Points" "92 Points"

[[2]]
[1] "93 Points" "92 Points" "92 Points" "92 Points" "92 Points" "92 Points"

[[3]]
[1] "93 Points" "92 Points" "92 Points" "92 Points" "92 Points" "92 Points"

[[4]]
[1] "93 Points" "92 Points" "92 Points" "92 Points" "92 Points" "92 Points"

[[5]]
[1] "93 Points" "92 Points" "92 Points" "92 Points" "92 Points" "92 Points"

1 Ответ

0 голосов
/ 24 января 2020

Это решение похоже работает. Я изменил способ создания URL:

library(rvest)

points <- lapply(paste0('https://www.winemag.com/?s=chile&drink_type=wine&page=', 1:5, '&search_type=all3', 1:5),
                 function(url){
                   url %>% read_html() %>% 
                     html_nodes(".rating") %>% 
                     html_text()
                 })
points

Я бы лично написал это так, хотя это, безусловно, вопрос предпочтений:

library(rvest)

df <- tibble(url = paste0('https://www.winemag.com/?s=chile&drink_type=wine&page=', 1:5, '&search_type=all3', 1:5)) %>%
  rowwise() %>%
  mutate(
    rating = read_html(url) %>% 
      html_nodes(".rating") %>%
      html_text() %>%
      list()
  ) %>%
  unnest(cols = c(rating))
...