Python 웹 스크래핑

Python으로 웹에 있는 자료들을 스크래핑 하는 방법을 알아봅니다.


수강중

8. 다음 영화에서 영화평과 별점 수집

영화평 수집

다음(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')