본문 바로가기
Studying/Python

[Python] 웹 크롤링 해보기( 네이버 영화리뷰 크롤링)

by giem 2022. 6. 6.
반응형

이제 슬슬 기본적인 문법을 익혔으니 AI 관련 교육 내용으로 넘어가 보려고 한다.

 

우선 기계학습에 가장 먼저 준비해야 할 것은 데이터다!

그 방대한 데이터를 우리가 직접 만들기는 어려우므로 현재 존재하는 데이터를 가지고 오려고 한다.

 

우선 검색해본 결과 내부 연구나 교육적 목적으로 이미 가공된 인터넷의 글들을 수집하는 것은 공정이용으로 저작권법에 어긋나지 않는다고 한다.

 

따라서 네이버 영화 리뷰를 크롤링하여 나만의 긍부정 문장 데이터 셋을 만들어 보겠다.

 

우선 웹크롤링에 필요한 모듈을 가져와 보겠다.

 

import time
import requests
from bs4 import BeautifulSoup
import csv

우선 각 모듈을 간략하게 설명하면

 

time 함수는 시간관련 컨트롤

requests는 웹페이지를 가져오기 위해서

beautifulsoup는 해당 웹페이지의 특정 요소(element)를 가져오기 위해서

csv는 정보들을 csv로 저장하고 불러오기 위한 모듈들이다.

 

불러온 모듈들로 대충 유추가 가능하겠지만

웹페이지를 가져오고, 그 페이지에서 영화제목, 평점, 감상평을 가져올 것이다.

 

우선 코드를 보자.

samples = []
page_id = 1

while(len(samples)<1000):	#1000개의 샘플만 가져오겠다.
  resp = requests.get('https://movie.naver.com/movie/point/af/list.naver?&page='+str(page_id)) #페이지 얻어옴
  txt = resp.text	#json 형식의 resp에서 text부분만 추출
  soup = BeautifulSoup(txt, 'html.parser') #beautifulsoup로 element 추출 준비
  
  elements = soup.select('td.title')
  for element in elements:
    movie = element.select_one('a.movie').text
    score = element.select_one('em').text
    sentence = element.select_one('br').next_sibling.strip()
    if sentence == "":
      continue
    samples.append((movie, score, sentence))

  page_id += 1

#파일저장
with open('samples.csv', 'w') as fd:
  writer = csv.writer(fd)
  writer.writerow(['movie', 'score', 'sentence'])
  writer.writerows(samples)

 

주석으로는 부족할 것 같아서 beautifulsoup 처리 로직을 추가적으로 설명하려고 한다.

 

우선 https://movie.naver.com/movie/point/af/list.naver?&page=1 사이트의 요소 정보를 개발자도구를 통해 확인해보자

 

개발자도구는 크롬기준 f12를 누르고 ctrl+shift+c를 누르면 원하는 곳의 element를 볼 수 있다.

 

이렇게 가져오고 싶은 부분을 클릭하면

이렇게 표시되어 있다.

 

그럼 다시 코드로 보면

  elements = soup.select('td.title')

elements는 td태그이고 class가 title인 모든 element들을 저장한다.

 

그리고 for문으로 elements를 돌며 

movie = element.select_one('a.movie').text
score = element.select_one('em').text
sentence = element.select_one('br').next_sibling.strip()

movie에는 element 안의 a태그이고 class가 movie인 것의 text부분, 위에서는 "쥬라기 월드: 도미니언" 부분을 저장한다.

score은 em 태그부분, 위에서는 1을 저장한다.

 

sentence는 br태그의 다음부분을 저장하고 왼쪽, 오른쪽의 공백을 지운 후 저장한다.

감상평 부분은 태그가 따로 없어서 'br의 다음부분'을 선택하는 next_sibling을 사용했다.

 

다른 부분들은 이전의 파이썬 문법 포스트를 통해, 또 모듈들은 간단한 검색을 통해 이해할 수 있을 것이다.

 

이를 실행시키면 samples.csv 파일이 생길 것이다.

 

우선 데이터 셋 만들기는 성공이다.

 

다음 포스트에서는 이 데이터 셋을 불러오고 가공해보도록 하겠다.

 

반응형

댓글