본문 바로가기
Python/파이썬 크롤링

글로우픽 크롤링

by 잉나영 2024. 5. 29.
반응형

이번 기말 프로젝트를 위해 글로우픽에 있는 크림 리뷰순 top20을 크롤링 해보았다.

아래의 각 크림에 들어가 리뷰를 크롤링 할 것이다.

 

 

일단 시작하기 전 필요한 라이브러리를 불러온다.

# 라이브러리 불러오기
from selenium import webdriver # 브라우저 자동화를 위한 모듈
import requests # HTTP 요청을 보내기 위한 모듈
from bs4 import BeautifulSoup as bs # HTML 내용 파싱을 위한 모듈
import pandas as pd # 데이터 조작 및 분석을 모듈
import time # 코드 실행 속도 조절을 위한 모듈
import re # 정규 표현식 사용을 위한 모듈
import pickle # 파이썬 객체 직렬화를 위한 모듈
from selenium.webdriver.common.by import By # 다양한 방법으로 엘리먼트를 찾기 위한 모듈
import datetime # 날짜와 시간 연산을 위한 모듈

 

 

동적 크롤링을 진행하기 위해 원래 저 사이트에서 자동으로 들어가 크롤링을 시작하려고 하니 사이트에서 막은 건지 없는 페이지라고 떴던 문제가 발생하였다.

그래서 결국 20개의 데이터를 각각 사이트를 설정해줘서 크롤링을 시작하게 되었다. (하...)

 

# 크롬 드라이버 로드
driver = webdriver.Chrome()

# 웹 페이지 열기
driver.get('https://www.glowpick.com/products/4319')

# 페이지가 완전히 로드될 때까지 대기
time.sleep(5)  # 5초 대기. 필요한 경우 조정

# 페이지 소스를 가져와서 BeautifulSoup으로 파싱
soup = BeautifulSoup(driver.page_source, 'html.parser')

# 각 리스트 초기화
title = []  # 제목 리스트
new_doc = []  # 상세설명 리스트
star = []  # 리뷰 별점 리스트
age = []  # 리뷰 작성자 나이 리스트
type_list = []  # 리뷰 작성자 피부 타입 리스트
sex = []  # 리뷰 작성자 성별 리스트
comment_list = []  # 리뷰 내용 리스트

# 제목 (제품 이름)
try:
    product_title = soup.find('h1', class_='product__summary__name').get_text(strip=True)
except:
    product_title = 'null'

# 상세 설명
try:
    product_desc = soup.find('pre', class_='info__text description__text').get_text(strip=True)
except:
    product_desc = 'null'

# 리뷰 리스트 가져오기
reviews = soup.find_all('article', class_='review review__item')

for review in reviews:
    # 리뷰 별점
    try:
        c = review.find('span', class_='stars__rating font-spoqa').get_text(strip=True)
    except:
        c = 'null'
    star.append(c)
    
    # 리뷰 작성자 정보
    try:
        user_info = review.find_all('span', class_='property__wrapper__item')
        d = user_info[0].get_text(strip=True) if len(user_info) > 0 else 'null'
        e = user_info[1].get_text(strip=True) if len(user_info) > 1 else 'null'
        f = user_info[2].get_text(strip=True) if len(user_info) > 2 else 'null'
    except:
        d, e, f = 'null', 'null', 'null'
    
    age.append(d)
    type_list.append(e)
    sex.append(f)
    
    # 리뷰 내용
    try:
        g = review.find('pre', class_='cutter__pre').get_text(strip=True)
    except:
        g = 'null'
    comment_list.append(g)

    # 제목과 상세 설명을 리뷰 개수에 맞게 반복하여 추가
    title.append(product_title)
    new_doc.append(product_desc)

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

# 크롤링한 데이터를 데이터프레임으로 변환
raw_data = pd.DataFrame({
    'title': title,
    'doc': new_doc,
    'star': star,
    'age': age,
    'type_list': type_list,
    'sex': sex,
    'comment_list': comment_list
})

# 결과 출력
print(raw_data)

 

크림 이름, 크림에 대한 상세 설명, 별점, 리뷰자 나이, 리뷰자 피부타입, 리뷰자 성별, 리뷰를 크롤링해왔다.  

 

결과

 

 

file_path='C:/Users/lnyln/20221383/3학년 1학기/데이터마이닝/'
f = open(file_path + "d1.pkl", "wb")
pickle.dump(raw_data,f)

f.close()

피클 타입으로 만들어주고

 

# 저장된 pickle 파일을 불러옴
f = open(file_path + "d1.pkl", "rb")
temp_file = pickle.load(f)
f.close()

temp_file

열어보면?

 

결과물

아주 잘 크롤링이 된 것을 알 수 있었다. 

하지만 여기서 또 문제가 발생하게 되는데...

분명 리뷰순으로 결과를 검색했을 때는 리뷰가 3,164개 작성되었다고 했지만, 보여주는 것은 달랑 50개의 리뷰였다.

우리의 크롤링 목표와는 다른 결과물이 나와 굉장히 당황하였다.

그래도 혹시모르니 남은 데이터를 다 크롤링했다.

 

# CSV파일로 저장
temp_file.to_csv("d19.csv", index = False, encoding="utf-8-sig")

모든 20개의 파일을 csv파일로 변경해주었다.

 

d1 = pd.read_csv('d1.csv')
d2 = pd.read_csv('d2.csv')
d3 = pd.read_csv('d3.csv')
d4 = pd.read_csv('d4.csv')
d5 = pd.read_csv('d5.csv')
d6 = pd.read_csv('d6.csv')
d7 = pd.read_csv('d7.csv')
d8 = pd.read_csv('d8.csv')
d9 = pd.read_csv('d9.csv')
d10 = pd.read_csv('d10.csv')
d11 = pd.read_csv('d11.csv')
d12 = pd.read_csv('d12.csv')
d13 = pd.read_csv('d13.csv')
d14 = pd.read_csv('d14.csv')
d15 = pd.read_csv('d15.csv')
d16 = pd.read_csv('d16.csv')
d17 = pd.read_csv('d17.csv')
d18 = pd.read_csv('d18.csv')
d19 = pd.read_csv('d19.csv')
d20 = pd.read_csv('d20.csv')

glowpick = pd.concat([d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20], ignore_index=True)

그리고나서 concat을 이용해 데이터를 합쳐주었다...

 

그 결과

그렇게해서 총 1000개의 데이터를 크롤링했다!!

 

 

하지만 이 데이터 사용하지 않았다는 건 안비밀 

반응형

'Python > 파이썬 크롤링' 카테고리의 다른 글

쿠팡 리뷰 크롤링 뚫는 법  (0) 2024.06.07
쿠팡 크롤링  (0) 2024.06.04
올리브영 크롤링 하기  (1) 2024.06.02
[네이버 뉴스] 크롤링 하는 방법  (0) 2024.05.08