2016-05-31 2 views
0

나는 웹 스크랩을 학습하고 https://www.kununu.com/us/google1/reviews에서 정보를 긁어 내려고합니다.페이지 끝에 "추가로드"옵션이있는 경우 rvest를 사용하여 데이터 스크랩

여기 내 코드입니다 : RM (목록 = 1!())

library(httr) 
library(rvest) 
library(xml2) 
library(curl) 

url <- "https://www.kununu.com/us/google1/reviews" 

reviews <- url %>% 
    read_html() %>% 
    html_nodes(".panel-body") 

quote <- reviews %>% 
    html_nodes("h2 a") %>% 
    html_text() 

rating <- reviews %>% 
    html_nodes(".tile-heading") %>% 
    html_text() 

date <- reviews %>% 
    html_nodes("strong") %>% 
    html_text() 

a <- data.frame(quote, rating, date, stringsAsFactors = FALSE) 

그러나, 위의 코드 긁힌 자국 첫 번째 열 몸. 동적 인 웹 사이트를위한 RSelenium 패키지에 관한 몇 가지 제안을 인터넷에서 발견했습니다. 불행히도 checkForServer()를 사용하고 startServer() 명령을 사용하면 내 컴퓨터에서 오류가 발생합니다. LOAD MORE 옵션이 바닥에있을 때 한 장의 모든 56 개 리뷰를 고칠 생각은 없습니까?

답변

0

Load More 링크 위로 마우스를 가져 가면 URL 끝에 정수가 추가 된 것입니다. 페이지 전체를 반복하면 모두들을 수 있습니다. 먼저 리뷰 수를 추출한 다음 데이터가있는 페이지 수를 얻은 다음 코드를 사용하여 데이터를 가져옵니다. ...

library(httr) 
library(rvest) 
library(xml2) 
library(curl) 
library(plyr) 

url <- "https://www.kununu.com/us/google1/reviews" 
num_of_reviews <- read_html(url) %>% 
    html_nodes(".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(".panel-body") 

    quote <- reviews %>% 
    html_nodes("h2 a") %>% 
    html_text() 

    rating <- reviews %>% 
    html_nodes(".tile-heading") %>% 
    html_text() 

    date <- reviews %>% 
    html_nodes("strong") %>% 
    html_text() 

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

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

> str(df) 
'data.frame': 56 obs. of 3 variables: 
$ quote : chr "Exceptional: 4.13 of 5" "Noteworthy: 3.75 of 5" "Remarkable: 5.00 of 5" "Exemplary: 4.25 of 5" ... 
$ rating: chr "\n  4.13\n " "\n  3.75\n " "\n  5.00\n " "\n  4.25\n " ... 
$ date : chr "Dec 30, 2015" "Dec 30, 2015" "Dec 30, 2015" "Dec 29, 2015" ... 
+0

감사합니다. –