크롤링

크롤링_네이버 영화 리뷰 수집(실습)

asu2880 2022. 6. 28. 12:40

url ='https://movie.naver.com/movie/bi/mi/pointWriteFormList.naver?code=81888&type=after&i[%E2%80%A6]geSubscriptionAlready=false&isMileageSubscriptionReject=false'

# 서버에게 브라우저로 접속했다라는 것을 인지시키기 위한 헤더
header = {
    'user-agent':
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}

res = req.get(url, headers=header).text
html = bs(res, 'lxml')

html.select('div.score_reple > p > span')

 

# 관람객이라는 단어 빼기
reviews = html.select('div.score_reple > p > span')

for review in reviews:
    #'관람객'을 제외한 리뷰 출력
    if review.text != '관람객':
        print(review.text.strip())

 

for pageNum in range(5):
    url = 'https://movie.naver.com/movie/bi/mi/pointWriteFormList.naver?code=81888&type=after&i[%E2%80%A6]geSubscriptionAlready=false&isMileageSubscriptionReject=false'
    header = {
        'user-agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
    }
    res = req.get(url, headers=header, params={'page' : pageNum}).text
    html = bs(res, 'lxml')
    
    reviews = html.select('div.score_reple > p > span')
    
    for review in reviews:
        #'관람객'을 제외한 리뷰 출력
        if review.text != '관람객':
            print(review.text.strip())
            
    print('-'*30, (pageNum+1), '페이지', '-'*30)
    
    time.sleep(1)

 

import requests as req
import pandas as pd
import time
from bs4 import BeautifulSoup as bs

# 로직이 실행되는 진행률을 프로그래스바로 출력해주는 라이브러리
from tqdm.notebook import tqdm
url ='https://movie.naver.com/movie/bi/mi/pointWriteFormList.naver?code=81888&type=after&i[%E2%80%A6]geSubscriptionAlready=false&isMileageSubscriptionReject=false'

# 서버에게 브라우저로 접속했다라는 것을 인지시키기 위한 헤더
header = {
    'user-agent':
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}

res = req.get(url, headers=header).text
html = bs(res, 'lxml')
strPageNum = html.select_one('strong > em').text
print(strPageNum)
# 13,195 > 1320 으로 변환하기
# 1. strPageNum 값에서 ','를 '' 으로 변환(13,195 -> 13195)
strPageNum = strPageNum.replace(',', '')

# 2. strPageNum을 정수로 변환(int()활용)
intPageNum = int(strPageNum)

# 3. 정수데이터의 몫 구하기 -> 페이지 수 (// 활용)
totalPage = intPageNum//10

# 4. 정수데이터의 나머지를 구하기(% 활용)
# 5. 나머지가 0 이상일 경우 페이지 수에 + 1
if intPageNum%10 > 0:
    totalPage += 1

print('총 페이지 수: ', totalPage)

 

for i in tqdm(range(100)):
    print(i, end=' ')

 

# 파일 저장 및 읽는 함수
f = open('reviews.txt', 'w') # 파일이 없는 경우 자동으로 파일 생성, 파일이 있는 경우 존재하는 파일 열기
f.write('Hello World!') # 그 파일을 기록을 하고
f.close() # 파일을 저장한다
# 파일 객체 생성
f = open('reviews.txt', 'w')

for pageNum in tqdm(range(1, totalPage+1)):
    url = 'https://movie.naver.com/movie/bi/mi/pointWriteFormList.naver?code=81888&type=after&i[%E2%80%A6]geSubscriptionAlready=false&isMileageSubscriptionReject=false'
    header = {
        'user-agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
    }
    res = req.get(url, headers=header, params={'page' : pageNum}).text
    html = bs(res, 'lxml')
    
    reviews = html.select('div.score_reple > p > span')
    
#   영화 리뷰 페이지별로 구분하여 출력
    for review in reviews:
        #'관람객'을 제외한 리뷰 출력
        if review.text != '관람객':
            f.write(review.text.strip())

#   1초 뒤에 실행       
    time.sleep(1)

# 파일 객체 종료
f.close()
# 파일 객체 생성
f = open('reviews.txt', 'r')
text = f.readline()
f.close()

text
728x90
반응형