네이버 리뷰 크롤링 feat 챗GPT 활용 구글드라이브 저장까지 만들기

2024. 4. 18. 13:48AI활용

반응형

오늘 작업은 네이버 리뷰를 모아서 리뷰 분석 및 최신 리뷰 또는 블랙리뷰를 관리하는 담당자에게 도움이 되는 파이썬 코드를 만들 예정입니다

Part 1: 준비 및 기본 설정

 

먼저, Python 환경에서 Selenium, BeautifulSoup, pandas, gspread를 사용하여 네이버 플레이스에서 리뷰 데이터를 크롤링하고 Google 스프레드시트에 업로드하는 프로젝트를 준비합니다. 이를 위해 필요한 Python 패키지를 설치해야 합니다.

 

각각 개별로 설치 해도 되지만, 처음 하시는 분은 한번에 설치 하시면 됩니다

pip install selenium beautifulsoup4 pandas gspread oauth2client webdriver_manager

 

개별 설치는 하나씩 필요한 것만 하셔도 됩니다

pip install selenium

 

웹드라이버 설정

Selenium을 사용하여 웹 페이지와 상호 작용하기 위해 Chrome 웹드라이버를 설정합니다. 웹드라이버는 Selenium이 웹 페이지를 제어할 수 있게 해 주는 프로그램입니다.

 

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

options = webdriver.ChromeOptions()
options.add_argument('window-size=1920x1080')
options.headless = True
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)

 

리뷰 데이터 크롤링

각 지점별 URL에서 Selenium과 BeautifulSoup을 사용해 리뷰 데이터를 크롤링합니다. 페이지를 스크롤하여 더 많은 리뷰를 로드하는 동작도 포함합니다.

import time
from bs4 import BeautifulSoup

branches = {
    '네이버플레이스': '플레이스 주소 적어 주세요',
    # 네이버플레이스 주소 적어주세요!!
}

all_reviews = []
for branch, url in branches.items():
    driver.get(url)
    time.sleep(10)
    for _ in range(5):
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(3)

    html = driver.page_source
    soup = BeautifulSoup(html, 'html.parser')
    reviews = soup.find_all('li', {'class': 'owAeM'})
    for review in reviews:
        username = review.find('span', class_='P9EZi').text if review.find('span', class_='P9EZi') else 'No Username'
        content = review.find('span', class_='zPfVt').text if review.find('span', class_='zPfVt') else 'No Content'
        date = review.find('time').text if review.find('time') else 'No Date'
        all_reviews.append({'Branch': branch, 'Username': username, 'Date': date, 'Review': content})

 

데이터 업로드

수집된 데이터를 pandas DataFrame으로 변환하고, 이를 Google 스프레드시트에 업로드합니다.

 

import pandas as pd

driver.quit()  # 드라이버 종료
df = pd.DataFrame(all_reviews)
df.index += 2  # 헤더 이후부터 데이터 삽입
for index, row in df.iterrows():
    worksheet.update(f'A{index}:D{index}', [row.values.tolist()])

 

 

코드를 구분해서 작성했고 이것을 전체로 하나로 소스로 해서

네이버 플레이스 리뷰를 가져올 수가 있습니다

 

2024-04-18 최신 업데이트

아래 2가지를 전부 하셔야 소스가 정상 작동 합니다

1. 구글드라이브로 저장할경우 API연동 해서 JSON 값을 가져 와야 합니다 (구글드라이브 저장)

2. 네이버플레이스는 모바일 주소로 들어가서 해당 리뷰URL을 입력해 주시면 됩니다

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import time
import pandas as pd
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import datetime
import os
import sys

# 실행 파일의 디렉토리 경로 구하기
if getattr(sys, 'frozen', False):
    application_path = os.path.dirname(sys.executable)
else:
    application_path = os.path.dirname(__file__)

# JSON 파일 경로
json_file_path = os.path.join(application_path, '구글엑셀시트API.json')

# Google Drive에 접속
gc = gspread.service_account(json_file_path)
spreadsheet_url = "https://docs.google.com/spreadsheets/d/1eT-vcexcJsk-y7ClVZmvjbC6eiCtQDp54UcLaJzkK0s/edit?usp=sharing"

# 스프레드시트 문서 열기
doc = gc.open_by_url(spreadsheet_url)

# "시트1" 워크시트 선택
worksheet = doc.worksheet("시트1")

# 헤더 작성
worksheet.update(range_name='A1:D1', values=[['지점', '사용자', '날짜', '리뷰내용']])

# 웹드라이버 설정
options = webdriver.ChromeOptions()
options.add_argument('window-size=1920x1080')
options.headless = True

# Chrome 드라이버 초기화
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)

# 네이버플레이스 URL 정보
branches = {
    '네이버플레이스명': '네이버플레이스 URL'
    # 내 가게명 + 네이버플레이스URL 적어 주세요
}

# 최종 데이터를 저장할 리스트
all_reviews = []

# 리뷰 수집
for branch, url in branches.items():
    driver.get(url)
    time.sleep(10)

    for _ in range(5):
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(3)

    html = driver.page_source
    soup = BeautifulSoup(html, 'html.parser')
    reviews = soup.find_all('li', {'class': 'owAeM'})

    for review in reviews:
        username = review.find('span', class_='P9EZi').text if review.find('span', class_='P9EZi') else 'No Username'
        content = review.find('span', class_='zPfVt').text if review.find('span', class_='zPfVt') else 'No Content'
        date = review.find('time').text if review.find('time') else 'No Date'
        all_reviews.append({
            'Jijum': branch,
            'Username': username,
            'Date': date,
            'Review': content
        })

# 드라이버 종료
driver.quit()

# 데이터 프레임 생성 및 구글 스프레드시트에 데이터 업로드
df = pd.DataFrame(all_reviews)
df.index += 2  # 행 번호를 2부터 시작하도록 조정
for index, row in df.iterrows():
    worksheet.update(f'A{index}:D{index}', [row.values.tolist()])

 

 

2.  구글드라이브 설정  방법 은 아래에 별도로 이미지로 만들어 놓았습니다

구글 드라이브 연결  소스 입니다

import gspread
import os
import sys
from oauth2client.service_account import ServiceAccountCredentials

# 실행 파일의 디렉토리 경로 구하기
if getattr(sys, 'frozen', False):
    application_path = os.path.dirname(sys.executable)
else:
    application_path = os.path.dirname(__file__)

json_file_path = os.path.join(application_path, '구글엑셀시트API.json')

gc = gspread.service_account(json_file_path)
spreadsheet_url = "https://docs.google.com/spreadsheets/d/1eT-vcexcJsk-y7ClVZmvjbC6eiCtQDp54UcLaJzkK0s/edit?usp=sharing"
doc = gc.open_by_url(spreadsheet_url)
worksheet = doc.worksheet("시트1")

결과를 구글 드라이브에 저장 하기 위해서는  JSON 파일을 설정하여 Google Drive API를 사용할 수 있도록 합니다. 이 파일은 Google Cloud Console에서 생성한 서비스 계정의 키를 포함하고 있습니다. 이 키를 프로젝트 디렉토리에 저장하고 파일 경로를 적절히 설정합니다.

 

1. 구글 클라우드 사이트 이동

https://console.cloud.google.com/

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

 

2. 서비스 계정 만들기

구글 클라우드 서비스계정

 

완료 버튼을 클릭하면

서비스 계정에 이메일이 생성 됩니다

 

구글 API 서비스계정

 

이메일을 클릭해서 들어가면 서비스계정 세부정보가 나옵니다

서비스계정 세부정보

 

서비스계정 세부정보에 키를 클릭!! -> 키추가를 클릭!!

구글드라이브 키

새키 만들기

새키 만들기

 

키 유형을 JSON 형식으로 만들면 됩니다

만들기 버튼을 누루면 내 컴퓨터 어디에 저장할지 나옵니다

 

그 키값이 있어야 나중에 파이썬 실행시 구글드라이브 키 경로를 참고하니

잘 보관해야 합니다

 

마지막으로 API서비스 - 라이브러리로 들어가서

API 라이브러리

 

API라이브러리에 검색해서 

 

"google sheet api" 검색 하시면 구글엑셀 시트가 나옵니다

구글시트 API

 

구글시트 API 사용 체크하면 됩니다

구글시트 API

 

이렇게 하면 구글드라이브 연동 작업은 완료 됩니다

챗 GPT 도움으로 오류코드를 붙여넣기로 하면 여기까지 될것 같습니다

 

허접한 코드 봐주셔서 감사합니다

반응형