다음 영화에서 영화평과 별점 수집
영화평 수집
다음(daum) 영화의 별점 및 영화평 크롤링을 하고, 데이터를 csv 파일로 저장합니다.
import requests
import lxml.html
import re
다음 영화에서 영화를 선택한 다음, 평점 탭에 들어가면 영화에 대한 별점을 볼 수 있습니다.
여기서는 극장판 헬로 카봇: 백악기 시대의 평점을 긁어보겠습니다. 평점의 페이지를 넘겨보면 쿼리에서 page
값이 변하는 것을 알 수 있습니다. 이 부분을 {}
로 표시해둡니다.
url = 'https://movie.daum.net/moviedb/grade?movieId=122193&type=netizen&page={}'
1페이지에 접속합니다.
page = 1
res = requests.get(url.format(page))
HTML 처리를 합니다.
root = lxml.html.fromstring(res.text)
리뷰의 CSS 선택자는 p.desc_review
입니다. 이는 태그가 p
이고 class
속성이 desc_review
임을 뜻합니다.
reviews = root.cssselect('p.desc_review')
.text_content()
로 요소의 모든 텍스트를 추출합니다. 앞뒤로 불필요한 공백이 있으므로 .strip()
으로 제거해줍니다.
for review in reviews:
content = review.text_content()
content = content.strip()
content = re.sub(r'\s+', ' ', content)
print(content)
극장판 퀄리티 답지 않게 3D CG 퀄리티가 좋고 공룡과 로봇의 환상의 조합 아이들 시선에 잘 맞춘 잘 만든 극장판 헬로 카봇이다 쥬라기월드 블루 라는 캐릭터가 여기에 나오네요 이런표절작ㅗㅗㅗㅗ 네 재미있어요~~~~~~ 재밌다 공룡들이 살아서 돌아다니는 게 신기해서재미있었다. 잘 만들었네요 아이들도 좋아하구 ㅎㅎ
리뷰의 별점은 em.emph_grade
요소에 있습니다.
scores = root.cssselect('em.emph_grade')
for score in scores:
print(score.text)
10 0 10 10 10 10 10 10 0 10
여러 페이지에 반복
1~3페이지에 걸쳐 위의 내용을 반복합니다.
data = []
for page in range(1, 3):
res = requests.get(url.format(page))
root = lxml.html.fromstring(res.text)
scores = root.cssselect('em.emph_grade') # 별점
reviews = root.cssselect('p.desc_review') # 영화평
for score, review in zip(scores, reviews): # 별점과 영화평을 짝을 짓는다
content = review.text_content().strip()
content = re.sub(r'\s+', ' ', content)
data.append((score.text, content))
저장
pandas
를 사용하여 별점과 영화평을 짝지은 데이터를 표로 만듭니다.
import pandas as pd
df = pd.DataFrame(data, columns=['score', 'review'])1
score | review | |
---|---|---|
0 | 10 | 극장판 퀄리티 답지 않게 3D CG 퀄리티가 좋고 공룡과 로봇의 환상의 조합 아이들... |
1 | 0 | 쥬라기월드 블루 라는 캐릭터가 여기에 나오네요 이런표절작ㅗㅗㅗㅗ |
2 | 10 | 네 |
3 | 10 | 재미있어요~~~~~~ |
4 | 10 | 재밌다 |
5 | 10 | |
6 | 10 | 공룡들이 살아서 돌아다니는 게 신기해서재미있었다. |
7 | 10 | |
8 | 0 | |
9 | 10 | 잘 만들었네요 아이들도 좋아하구 ㅎㅎ |
10 | 10 | |
11 | 10 | |
12 | 10 | 7, 5세 남매 푹 빠져서 봤습니다. 애들 눈높이에 딱 인듯요 |
13 | 10 | 한국애니 중 최고! 그래픽이 끝내줌 |
14 | 8 | 재밌게 봤습니다~~ |
15 | 10 | 아이도 잼나하고 어른도 푹 빠져 보게 되네요. |
16 | 10 | |
17 | 6 | 아이들은 즐겁게 봅니다. 공룡들과 공격하고 싸우는 설정은 별로. 우연이 너무 많은 ... |
18 | 4 | 아이와 어제 봤어요. 저는 좀 다른 느낌이네요. 화려한 영상도 그렇고 애쓴 영화인 ... |
19 | 10 | 아이와 함께 즐겁게 잘 봤습니다. 아이들이 좋아하는 카봇과 공룡의 조합이라니!! 조... |
표를 저장합니다.
df.to_excel('carbot.xlsx')