본문 바로가기
코딩 연습

네이버 영화 평점 리뷰 추출해보기 (with 파이썬)

by good4me 2022. 12. 30.

goodthings4me.tistory.com

네이버 영화 평점과 리뷰 페이지에 대한 파이썬 크롤링 소스 코드. 추출하다보니 "<br>" 태그 부분에 대한 크롤링 방법을 터득한 것이 있는데... 

 

 

네이버 영화 평점 리뷰 크롤링하기

네이버 영화 평점리뷰 개발자도구
네이버 영화 평점리뷰 개발자도구

네이버 영화 평점 리뷰 웹사이트 : https://movie.naver.com/movie/point/af/list.naver

여기서 하단 페이징 처리 부분을 클릭하면 페이지 파라미터가 붙은 URL을 브라우저 주소창에서 확인할 수 있다.

https://movie.naver.com/movie/point/af/list.naver?&page=1

 

good4me.co.kr

 

파이썬 크롤링 소스 코드

## 네이버 영화 평점 추출하기

import requests
from bs4 import BeautifulSoup
import pandas as pd

header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'}
for page in range(1, 3):
    url = f'https://movie.naver.com/movie/point/af/list.naver?&page={page}'
    res = requests.get(url, headers=header)
    # print(res.content.decode('utf-8'))
    soup = BeautifulSoup(res.text, 'html.parser')
    tb_trs = soup.find('table', class_='list_netizen').find_all('tr')
    print(len(tb_trs))
    for i, tr in enumerate(tb_trs):
        grade_reviews = []
        for j, td in enumerate(tr.find_all('td')):
            if j == 0:
                grade_reviews.append(td.text.strip())
            if j == 1:
                grade_reviews.append(td.find('a').text.strip())
                grade_reviews.append(td.find('div', {'class': 'list_netizen_score'}).find('em').text)
                for k, content in enumerate(td.find_all(text=True)):
                    if k == 8:
                        content2 = content.replace('\n', '').replace('\t', '').strip()
                        grade_reviews.append(content2)
            if j == 2:
                td2 = td.find_all(text=True)
                grade_reviews.append(td2[1])
    
        print(grade_reviews)

※ "<br>" 태그 부분 크롤링

  • <td> 부분에서 리뷰 글을 추출하기 위해 코드를 짜고 보니 "<br>" 태그가 방해를 했는데, 이 부분에 대해 find_all(text=True)를 적용하면, ['\n', '영웅', '\n', '\n', '별점 - 총 10점 중', '10', '\n', '\n', '개봉첫날 혼자보고 주말에 가족 모두 보려고 또 예매했어요연기,음악  모두 감동적이예요 \n', '신고', '\n'] 결과를 볼 수 있고,
  • index 8 즉, 9번째 부분을 출력하면 리뷰 글을 추출할 수 있다.
  • 그리고, \n\t 특수문자를 제거하기 위해 replace() 함수를 사용했다. 

페이지 수를 증가 - range(1, 2) 부분의 2를 증가 - 시키면 다른 페이지도 추출할 수 있다.

 

[실행 결과]

11
[]
['18636907', '오늘 밤, 세계에서 이 사랑이 사라진다 해도', '10', '
꼭보세요..나만 스트레스 받기 싫으니깐 꼭보세요', '22.12.30']
['18636906', '아바타: 물의 길', '10', '영상미가 미쳤고, 왜 13년의 세월이 걸렸는지 납득이 가는 영화. 눈이 즐거워지는 영화. 그러면서 
감동 있는 영화.꼭 추천합니다!!', '22.12.30']
['18636905', '올빼미', '10', '정말 재밌게 보고 왔음, 무서움! 그치
만 재미짐', '22.12.30']
['18636904', '아바타', '4', 'CG는 대단했지만 보는동안 그냥 저는 잤어요...', '22.12.30']
['18636903', '외계+인 1부', '4', '터미네이터, 에어리언, 백투더퓨처, 매트릭스, 전우치, 암살을 막 섞어서 비빔밥을 만들었는데… 맛이 없
음', '22.12.30']
['18636902', '오늘 밤, 세계에서 이 사랑이 사라진다 해도', '10', '
펑펑 울면서 봤습니다ㅠㅠ', '22.12.30']
['18636899', '외계+인 1부', '10', '정말강추...ㅎㅎ  .', '22.12.30']
['18636900', '아바타: 물의 길', '10', '재밌어요. 영상미가 좋아요', '22.12.30']
['18636898', '젠틀맨', '1', '최근10년간 본 영화 중 최악.첨으로 평
점남김. 시간 낭비, 돈낭비.', '22.12.30']
['18636897', '젠틀맨', '8', '주연배우들의 연기는 말할것도 없이 너
무 잘하고 내용도 재밌어서 시간가는 줄 모르고 봤어요', '22.12.30']
11
[]
['18636896', '나쁜 녀석들: 더 무비', '1', '나쁜 녀석들의 좋은 추억... 이영화가 다 망가뜨림...', '22.12.30']
['18636895', '올빼미', '10', '연기력도 연출도 스토리도 완벽', '22.12.30']
['18636894', '아바타: 물의 길', '6', '솔직히 스토리는 개판임.영화
보면서 시계를 몇번이나 봤는지 모를 정도로 지루함.CG 보려고 보는건
데 예전에 아바타 1 봤을때만큼의 충격은 없었음. 요즘 CG 기술들이 다들 좋아서', '22.12.30']
['18636893', '아바타: 물의 길', '10', '', '22.12.30']
['18636891', '영웅', '10', '시작부터 끝까지 눈물이 난 영화.감사합
니다 나라를 되찾기위해 힘쓰신 모든 영웅들', '22.12.30']
['18636890', '젠틀맨', '10', '너무 재밌어요~~덩달아 기분도 굿굿~~
갠적으론 아바타보다 훨씬 재미났어요왜 관객이 안 들어오는지 안타까
움이절로~~~암튼 내취향인지 재미났어요~~', '22.12.30']
['18636889', '영웅', '10', '영화 보는 내내 울컥했네요 ..!!!가족들, 연인, 친구들과 꼭 보셨으면 좋겠습니다!', '22.12.30']
['18636887', '영웅', '10', '올 한해 마무리하면서 가족들과 동반하여 2시간여 동안 벅찬 역사적 감동을 선사해준 제작진과 열연을 해주신 
배우분들에게 감사른드립니다.', '22.12.30']
['18636886', '아바타: 물의 길', '10', '10년기다린 보람이있는 역시! 너무 넋놓고봤어요~~', '22.12.30']
['18636885', '영웅', '10', '보는내내 울컥했네요..잊혀질때쯤 다시 
또보려구요너무 슬프고 감명깊게봤습니다 아직도 마음이 찡하네요', '22.12.30']

 

댓글