r rvest просмотр нескольких URL с несколькими сайтами и пропущенными значениями в некоторых узлах - PullRequest
0 голосов
/ 10 июня 2018

Я хотел бы почистить отзывы сотрудников от kununu.Сайт kununu имеет две специфические особенности, о которых необходимо позаботиться: 1. на первом сайте отображаются только первые 10 отзывов на одну компанию и 2. не все элементы, которые я хочу собрать, присутствуют в каждом обзоре (в некоторых из них отсутствуют значения)узлы).

Мой код отлично работает для одной компании.Но я не могу заставить его работать для списка URL (например, url <- c ("<a href="https://www.kununu.com/de/novartis-pharma/kommentare" rel="nofollow noreferrer">https://www.kununu.com/de/novartis-pharma/kommentare"," https://www.kununu.com/de/merckaa/kommentare")

Я пробовал много разных подходов - но ничего не получалось, такдалеко - может быть, один из вас знает хитрость. Большое спасибо всем заранее!

Мой рабочий код (одна компания) выглядит так:

url <- "https://www.kununu.com/de/novartis-pharma/kommentare" 

num_of_reviews <- read_html(url) %>%
  html_nodes(".company-profile-subnav .active .title-number") %>%
  .[[1]] %>%
  html_text()

# round up to nearest 10s
num_of_reviews_rounded <- num_of_reviews %>%
  as.numeric() %>%
  round_any(10, f = ceiling)

pages <- 1 : (num_of_reviews_rounded / 10)

get_reviews <- function(url){
  reviews <- url %>%
    read_html() %>%
    html_nodes(".review-content")

  quote <- reviews %>%
    lapply(.%>% html_nodes(".review-title a") %>%
             html_text() %>% ifelse(identical(., character(0)), NA, .)) %>% unlist

  date <- reviews %>%
    lapply(.%>% html_nodes(".hidden+ span") %>%
             html_text() %>% ifelse(identical(., character(0)), NA, .)) %>% unlist

  rating_image <- reviews %>%
    lapply(.%>% html_nodes(".review-ratings .rating-group:nth-child(13) .rating-badge") %>%
             html_text() %>% ifelse(identical(., character(0)), NA, .)) %>% unlist

  statement <- reviews %>%
    lapply(.%>% html_nodes(".col-sm-10 > div:nth-child(1)") %>%
             html_text() %>% ifelse(identical(., character(0)), NA, .)) %>% unlist


  a<-data.frame(quote, date, rating_image, statement,
                stringsAsFactors = FALSE)
  return(a)
}

list_of_dfs <- lapply(pages, function(x)get_reviews(paste0(url,"/",x)))
dfshort <- do.call(rbind, list_of_dfs)

str(dfshort)
...