본문 바로가기
파이썬(Python)

[한산-용의 출현] 댓글 수집하기

by Serendipity_ 2022. 8. 1.
반응형

요즘 날씨가 너무 덥습니다. 

제 블로그를 보시는 분들이라면 '숫자'로 보는 걸 좋아할 거라 생각했습니다. (기상청 자료 굳이굳이 들고왔습니다 )

기상청 자료

더우면 기력을 잃어버리는 개복치인 저는 영화관을 다녀왔습니다. 

 

실내를 찾아 다니는 때마침..! 이런 영화는 재미없기 힘들지라는 영화가 보였습니다.

그 이유는 바로.. ! 

영화순위(출처 : www.kobis.or.kr)

명량 때문입니다. 

명량 개봉일은 잊을 수 없는데요..! 바로 제 입대일입니다 ^^ 

(그런 이유로 저는 보지 못했습니다)

 

 

그래서 오늘은 한산 - 용의 출현 관련 댓글을 한번 수집해보겠습니다.

사실 댓글수집이 무슨 쓸모가 있냐? 라고 할 수 있지만 여러 분은 댓글 수집을 배우는 게 아니라 정보 수집 방법을 배우시는 것 입니다 ! 

 

먼저 코드 결론입니다 ! 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from csv import writer
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import pandas as pd
from selenium.common.exceptions import NoSuchElementException
 
options = webdriver.ChromeOptions()
options.headless = True
options.add_argument("window-size=1920x1080")
 
 
def get_movie_reviews(url, page_num=10):
    wd = webdriver.Chrome('chromedriver', options=options)
    wd.get(url)
 
    writer_list = []
    review_list = []
    date_list = []
 
    for page_no in range(1, page_num + 1):
        try:
            page_ul = wd.find_element(By.ID, 'paging_point')
            page_a = page_ul.find_element(By.LINK_TEXT, str(page_no))
            page_a.click()
            time.sleep(1)
            print(f"======{page_no}페이지 수집 중======")
 
            writers = wd.find_elements(By.CLASS_NAME, 'writer-name')
            writer_list += [writer.text for writer in writers]
 
            reviews = wd.find_elements(By.CLASS_NAME, 'box-comment')
            review_list += [review.text for review in reviews]
 
            dates = wd.find_elements(By.CLASS_NAME, 'day')
            date_list += [date.text for date in dates]
 
            if page_no % 10 == 0:
                next_button = page_ul.find_element(
                    By.CLASS_NAME, 'btn-paging.next')
                next_button.click()
                time.sleep(1)
 
        except NoSuchElementException:
            break
 
    movie_review_df = pd.DataFrame({"Writer": writer_list,
                                    "Review": review_list,
                                    "Date": date_list})
 
    return movie_review_df
 
 
url = "http://www.cgv.co.kr/movies/detail-view/?midx=83280"
movie_review_df = get_movie_reviews(url, 100)
print(movie_review_df)
 
movie_review_df.to_csv('한산_댓글모음.csv', encoding='utf-8-sig', index=False)
cs

아시는 분은 아시겠지만 현재 Selenium이 업데이트되면서 기존 코드는 안먹힙니다.

예를 들어, find_element_by_class_name은 find_element(By.CLASS_NAME)으로 작성하셔야 합니다.

위 코드는 업데이트 반영한 코드입니다.

 

그러면 CGV에 있는 댓글이 수집됩니다.

현재 1page에 있는 댓글입니다. 

 

크롤링 결과는

크롤링 결과

 

100페이지 댓글 수집한 결과는 csv 파일로 업로드 하였습니다.

 

 

한산_댓글모음.csv
0.06MB

혹시 그런 일은 없겠지만, 댓글을 매일 매일 수집해야한다..

뭔가 인터넷에서 매일 수집해서 보고해야한다. Python 꼭 배우세요 !!

 

 

반응형

댓글