[R] 크롤링 기초 학습 및 정적 페이지 크롤링 예시 (다음 영화 리뷰)

주로 파이썬을 이용해서 크롤링을 하지만, R을 이용했을 때 더 코드 짜기가 간단한 경우도 있을 수 있는 것 같다.

개인적으로 R로 하는 웹크롤링에 대해서 학습하기 위해서는 아래 링크를 정독하는 것을 강력히 추천한다.

https://mrchypark.github.io/getWebR

R이나 Python이나 크롤링을 하려면 기본적으로 html 구조에 대한 이해와 정규표현식 / 그리고 기본적인 문법에 대해서 학습해야 한다는 점에서 동일한 것 같다. 이번에는 다음 영화 리뷰라는 정적 페이지 크롤러 만드는 방법에 대해서 작성해보려고 한다. (동적 페이지는 selenium 을 사용해야 한다. 참고로 동적 페이지는 트위터처럼 페이지 구분이 되어 있는 것이 아니라 쭉쭉 스크롤링 하는 방식과 같은 페이지를 의미함)

html안에서 필요한 것을 추출하기 위해서, stringr이나 rvest를 활용한다. 라이브러리를 불러와보자.

library(rvest)
library(XML)
library(stringr)

크롬의 ‘검사’ 기능을 활용하면 html 구조에서 크롤링하고자 하는 부분의 속성을 추출할 수 있다. 원하는 부분에 마우스를 올린 뒤 검사를 누른다.

그러면 이렇게 오른쪽에 추출하고자 하는 부분이 어떤 코드에 해당하는지를 알 수 있다. 여기의 경우 상위 클래스는 review_info이고 본문이 포함된 클래스는 desc_review이다. 그외의 정보를 출력하고 싶으면 해당하는 부분에서 검사를 눌러서 클래스값을 조회해서 알아내면 된다.

url_base <- 'https://movie.daum.net/moviedb/grade?movieId=127242&type=netizen'

all.reviews <- c() #리뷰를 저장할 공간 만들기 
 for (page in 1:20){ 
	url <- paste(url_base, page, sep='') 
	htxt <- read_html(url, encoding="UTF-8") #htxt 변수에 url 주소를 저장한다. 인코딩 기본은 UTF-8로 지정. 
	table <- html_nodes(htxt, '.review_info') #리뷰에 대한 전체 클래스인 review_info를 입력해서 table 변수에 저장
	content <- html_nodes(table, '.desc_review')#영화 리뷰 텍스트의 클래스인 desc_review를 입력해서 content 변수에 저장
	reviews <- html_text(content) #content 변수에 저장한 문서의 text 부분을 reviews 변수에 저장 
	if(length(reviews)==0){break} #review 내용이 아무 것도 없을 경우 반복 중지 
	all.reviews <- c(all.reviews, reviews) #각 페이지에 대한 사용자 리뷰 텍스트를 all reviews 변수에 저장 
	print(page) #페이지 진행 출력 
}

저장하는 방법은 아래와 같다.

getwd() #파일이 저장된 폴더 찾기 

#저장방법 첫번째 
write.table(all.reviews, 'daum.txt')
write.table(all.reviews, 'daum.csv')

#저장방법 두번째
library(dplyr) #리뷰 텍스트를 데이터 프레임으로 변환하기 위한 라이브러리 불러오기 

search_reviews <- data_frame(id = 1:length(all.reviews),
                      review = all.reviews)
save(search_reviews, file="search_reviews.RData")

You may also like...

Leave a Reply