Rotten Tomatoes 영화 네티즌 리뷰

  1. 현재 작업 폴더의 경로 확인

getwd() 명령어를 스크립트창에 입력

getwd()
## [1] "/Users/shinhaenglee/Dropbox/2018_Class_Teaching/Capstone"

위의 코드를 입력하면, 현재 작업 폴더의 경로가 콘솔창에 나오게 됨 [1] "/Users/shinhaenglee/Dropbox/2018_Class_Teaching/Capstone"

*원할 경우, setwd() 함수를 이용하여 작업폴더를 변경할 수 있음

  1. 패키지 설치 웹페이지를 크롤링하기 위해서는 rvest패키지 필요하다.

이 패키지를 다운로드 및 설치하기 위해서는 install.packages() 함수를 사용한다. install.packages("rvest")

현재 작업 중인 RStudio 세션에서 해당 패키지를 사용하기 위해서는 library() 함수를 이용하여 패키지를 불러온다.

library(rvest)
## Loading required package: xml2
  1. 크롤링할 영화 리뷰 페이지를 검색한다. 예제로, Rotten Tomatoes의 Searching(서치) 리뷰 페이지를 살펴보자. https://www.rottentomatoes.com/m/searching_2018/reviews/?page=1&type=user&sort=

해당 페이지를 살펴보면 Reviews의 구성이 All Critics, Top Critics, My Critics, 그리고 Audience로 이루어져 있음을 알 수 있다. 우리는 관람객의 평을 분석할 것이기 때문에, Audience 섹션을 클릭한다.

페이지 주소를 살펴보면, page 넘버는 1, type은 user로 설정되어 있음을 알 수 있다. 리뷰 사이트의 첫번째 페이지 그리고 사용자(관람객)의 리뷰에 해당하는 페이지가 선택되어 있음을 알 수 있다. 이 URL 주소를 복사하여 코드에 입력한다.

하지만, 리뷰 페이지가 1에서 20까지 여러 페이지로 구성되어 있기 때문에 반복문을 구성해서 첫번째 페이지부터 20번째 페이지까지의 리뷰 텍스트를 크롤링하도록 코딩해야 한다. 이를 위해서 URL 주소를 페이지 넘버를 기준으로 전(before)과 후(after)로 나누었다.

url_before <- "https://www.rottentomatoes.com/m/searching_2018/reviews/?page="
url_after <- "&type=user&sort="
  1. 크롤링을 위한 명령어를 첫번째부터 20번째의 페이지에 걸쳐 반복해서 실행하도록 반복문 코드를 작성한다.
all.reviews <- c()
for(page in 1:20){
  url <- paste(url_before, page, url_after, sep="") # paste() 함수를 이용해서 url 변수에 URL 주소를 저장한다.
  htxt <- read_html(url) # read_html() 함수를 이용하여 저장한 URL 주소의 html 페이지를 htxt 변수에 저장한다.
  table <- html_nodes(htxt, ".review_table") 
  content <- html_nodes(table, ".user_review")
  reviews <- html_text(content)
  if(length(reviews) == 0){break}
  all.reviews <- c(all.reviews, reviews)
  print(page)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
## [1] 11
## [1] 12
## [1] 13
## [1] 14
## [1] 15
## [1] 16
## [1] 17
## [1] 18
## [1] 19
## [1] 20
  1. 리뷰 페이지의 html 구조 확인 웹브라우저 창에서 윈도우의 경우 [F12], 맥의 경우 option+command+I 키를 누르면 HTML 요소검사 창이 나타난다. 이 부분에서 사용자(관람객)의 영화 리뷰가 작성된 부분의 html 구조를 보면, 전체 Audience 영화 리뷰에 대한 부분의 class는 review_table이고, 그 중 각 사용자의 리뷰 텍스트에 대한 부분의 class는 user_review인 것을 확인할 수 있다.
all.reviews <- c()
for(page in 1:20){
  url <- paste(url_before, page, url_after, sep="") # paste() 함수를 이용해서 url 변수에 URL 주소를 저장한다.
  htxt <- read_html(url) # read_html() 함수를 이용하여 저장한 URL 주소의 html 페이지를 htxt 변수에 저장한다.
  table <- html_nodes(htxt, ".review_table")  # html_nodes() 함수를 사용하여 html 문서를 저장한 htxt 변수의 내용 중에서 review_table에 해당하는 부분을 table 변수에 저장한다.
  content <- html_nodes(table, ".user_review") # html_nodes() 함수를 사용하여 table 변수의 전체 리뷰 내용 중 각 사용자의 리뷰 부분의 class인 user_review에 해당하는 부분을 content 변수에 저장한다.
  reviews <- html_text(content)  # html_text() 함수를 사용하여 content 변수에 저장한 html 문서의 text 부분을 reviews 변수에 저장한다. 
  if(length(reviews) == 0){break} # reviews 내용이 아무것도 없을 경우, 반복 중지
  all.reviews <- c(all.reviews, reviews) # 각 페이지에 대한 사용자 리뷰 텍스트를 all.reviews 변수에 저장한다.
  print(page) # 페이지 진행 출력
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
## [1] 11
## [1] 12
## [1] 13
## [1] 14
## [1] 15
## [1] 16
## [1] 17
## [1] 18
## [1] 19
## [1] 20
  1. 데이터 프레임 화 크롤링 한 리뷰 텍스트를 분석을 위한 데이터 프레임으로 변환한다.
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
search_reviews <- data_frame(id = 1:length(all.reviews),
                      review = all.reviews)
save(search_reviews, file="search_reviews.RData")
  1. 파일이 저장된 폴더를 getwd() 함수를 이용해서 찾고, 그 폴더에 저장되어 있는 파일을 블랙보드 과제에 업로드