我想从kununu抓取员工评论。 kununu网站有两个需要注意的特定功能:1。每个公司的前10个评论仅显示在第一个网站上2.并非所有我想收集的项目都存在于每个评论中(某些项目中缺少值)节点)。
我的代码适用于一家公司。但是我没有让它用于网址列表(例如网址< - c(“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)