정구리의 우주정복

Python Project 04. 영화리뷰 긍정부정 예측하기 - (1) 크롤링 본문

PYTHON/PROJECT

Python Project 04. 영화리뷰 긍정부정 예측하기 - (1) 크롤링

Jungry_ 2020. 12. 21. 19:34
반응형

train data 는 네이버에서 제공하는 영화리뷰 긍정부정 데이터를 사용했고

test data 는 현재 최근 상영한 영화인 '삼진그룹 영어토익반' 의 영화리뷰를 크롤링해서 사용했다.

 

크롤링을 통해 가져온 데이터는 별점 , 댓글내용을 가져왔고 

별점 총 10점에서 7-10 까지는 긍정적(1) , 그 이하는 부정적(0) 이라고 판단해 라벨값을 지정해주었다

 

#필요한 라이브러리들 import 
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import pandas as pd
import re

#url
BASE_URL = 'https://movie.naver.com/movie/bi/mi/pointWriteFormList.nhn?code=189141&type=after&onlyActualPointYn=N&onlySpoilerPointYn=N&order=newest&page=2&page='
page_num  = 1
id = 'pagerTagAnchor' #각 페이지별 고유 id
driver = webdriver.Chrome(chromeDriver 위치)
star_score=[] #별점이 들어갈 List
content = [] #댓글이 들어갈 List

while True: #무한루프
#try except에 넣은 이유는 더이상 페이지가 없으면 에러를 띄워 멈추도록 하기위해서임
    try:
        URL = BASE_URL+str(page_num) #url과 page_num 을 통해 각 페이지의 url 을 만들어줌
        page_id = id + str(page_num) 
        driver.get(URL) #크롬드라이버 사용
        driver.find_element(By.ID,page_id)#find가 실패하면 페이지가 없는것이므로 error 발생 break

        for num in range(10): #각페이지에 10개의 댓글이있음
            id_name='_filtered_ment_'+str(num) #id 의 id값
            comment = driver.find_element_by_id(id_name).text #댓글부분 추출
            comment = re.sub('[^ㄱ-ㅎㅏ-ㅣ가-힣 ]','',comment) #한글을 제외하고 삭제
            if comment != '': #삭제를 했을때 공백이 아니라면 list 에 추가
                content.append(comment)
                star_score.append(int(driver.find_element_by_css_selector('body > div > div > div.score_result > ul > li:nth-child('+str(num+1)+') > div.star_score > em').text))
                #별점도 list 에 추가

        page_num+=1 #페이지 번호 1 상승
        print(page_num)

    except:
        break

driver.quit()

def star_score_eval(star_score): #별점을 통해 긍정부정 판단해주기
    change_star = []
    for star in star_score:
        if star >= 7: #7점 이상인경우
            change_star.append(1)
        else: #7점 미만인경우
            change_star.append(0)
    return change_star

change_star = star_score_eval(star_score) 

replys = list(zip(star_score,content,change_star))

#pandas 를 사용해서 csv 파일로 만들어주기
col = ['star_score','document','label']
data_frame = pd.DataFrame(replys,columns=col)
data_frame.to_csv('data.csv',sep=',',header=True)
print('work it')

 

크롤링에는 크롬웹드라이버를 사용했다

페이지 id 를 이용해 페이지를 넘겨주었고 한 페이지에 10개의 댓글이 있어서 for문을 통해 댓글과 별점을 가져와 list 에 저장해주었다

이 과정에서 한글이 아닌것들을 한번 걸러주었다 (영어로된 글 , 이모티콘으로만 이루어진 글등)

def start_score_eval() 부분은 별점을 0 과 1로 바꿔주는 함수이다. (일일히 긍정부정을 판단하기는 힘들어서 대략적으로 정하는거임)

 

이후 pandas 의 DataFrame 을 사용해서 csv 파일로 만들어주었다

 

구체적인 코드 설명은 주석으로 첨부하겠음

 

결과 이미지 (csv file)

별점 , 댓글내용 , 긍정부정 순서로 파일이 만들어졌다

반응형
Comments