rvest在多个网站上抓取多个网址,并在某些节点中丢失值

时间:2018-06-10 16:34:19

标签: r web-scraping web-crawler screen-scraping rvest

我想从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)

0 个答案:

没有答案