퍼스널 컬러 데이터 수집 (1) 계획 및 설정
프로젝트 개요
퍼스널컬러는 개인의 피부 톤, 눈동자 색, 머리카락 색과 조화를 이루는 색상을 분석하는 개념입니다. 이를 활용하면 자신에게 어울리는 색상을 찾을 수 있으며, 패션, 뷰티, 디자인 등 다양한 분야에서 활용할 수 있습니다.
이번 프로젝트에서는 퍼스널컬러 유형(봄, 여름, 가을, 겨울)에 맞는 이미지 데이터를 Google 이미지에서 자동으로 수집하는 크롤링 시스템을 구축하였습니다. 이를 통해 다양한 퍼스널컬러의 시각적 데이터를 확보하고 분석할 수 있었습니다.
데이터 수집을 하기 위해 먼저 라벨링 된 데이터를 찾았습니다.
하지만 퍼스널 컬러는 조도에 영향을 많이 받기도 하며 전문적인 판단이 필요하기 때문에 정확한 라벨링 된 데이터는 존재하지 않았습니다. 이를 해결하기 위해 저는 먼저 진단이 된 연예인들 대상으로 수집 계획을 설립했습니다. 이후 라벨링 하기 전에 조도에 영향을 받을 수 있기 때문에, White Balancing 설정을 하기로 했습니다.
아래는 진단된 퍼스널컬러 List의 일부입니다.
데이터의 양이 많아 일부만 표시하겠습니다.
spring = [
"걸스데이 혜리",
"이연희", "한지민", "한지현", "환승연애2 나연", "아이들 슈화", ...
]
summer = [
"세븐틴 디노", "세븐틴 민규", "세븐틴 에스쿱스",
"세븐틴 우지", "세븐틴 원우", "세븐틴 정한", "세븐틴 호시", "소녀시대 태연",
"손예진", "슈퍼주니어 규현", "스트레이키즈 리노", "신혜선", "아스트로 문빈",
"아스트로 차은우", "아이브 장원영",...
]
autumn = [
"강혜원", "김구라", "김민주", "김세정", "김유정",
"뉴이스트 황민현", "뉴진스 민지", ..
]
winter = [
"곽윤기", "국가스텐 하현우", "권은비", "김혜수", "몬스타엑스 형원",
"세븐틴 조슈아", "문근영", "방탄소년단 뷔", "아이들 소연", ..
]
이를 대상으로 이미지를 크롤하여 라벨링 했습니다.
1. Import Model
먼저 크롤링 하기 위해 import했던 모델들입니다.
import pandas as pd
import numpy as np
import requests as rq
import time
import os
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from fake_useragent import UserAgent
from urllib.parse import urljoin
from urllib.request import urlretrieve
from selenium.webdriver.chrome.options import Options
이번에도 저는 selenium을 적극 활용 했습니다.
Selenium의 코드는 직관적이며 많은 기능을 쉽게 포함할 수 있고, Beautiful Soup과 달리 자동화 개념에 더욱 친근한 Selenium이 이번 데이터 수집에 적합하다고 생각하여 적극 활용했습니다.
2. 옵션 역할
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
save_dir = '/Users/dongdong_JH/Downloads'
os.makedirs(save_dir, exist_ok=True)
- chrome_options = Options()
→ Chrome 브라우저의 실행 옵션을 설정하기 위해 Options 객체를 생성합니다. - chrome_options.add_argument("--headless")
→ **Headless 모드(화면 없이 실행)**를 활성화하여 브라우저 UI를 띄우지 않고 백그라운드에서 실행하도록 설정합니다.
→ 이를 통해 속도를 높이고, 리소스를 절약할 수 있습니다. - chrome_options.add_argument("--no-sandbox")
→ 보안 샌드박스 기능을 비활성화합니다.
→ 일반적으로 Linux 서버 환경에서 크롤링을 실행할 때 필요한 옵션이며, 일부 시스템에서는 이 옵션이 없으면 실행이 제한될 수도 있습니다. - chrome_options.add_argument("--disable-dev-shm-usage")
→ 공유 메모리(Shared Memory) 사용을 비활성화합니다.
→ 기본적으로 Chrome은 /dev/shm을 사용하여 데이터를 저장하지만, 일부 제한된 환경(예: Docker 컨테이너)에서는 해당 경로의 메모리 공간이 부족할 수 있습니다.
→ 이 옵션을 사용하면 메모리 부족으로 인한 크래시를 방지할 수 있습니다.
이렇게 데이터 수집 계획과 설정을 미리 했습니다. 이후 Cloudflare 발생한다면 추가적으로 옵션을 설정해주면 됩니다.
다음 게시글에서는 크롤 코드를 구체적으로 설명하겠습니다.
'Web-Crawling' 카테고리의 다른 글
Personal Color Data gathering: Google Image || (2) | 2025.02.18 |
---|---|
Movie Recommendation Algorithm System Project Web-Crawling (4) | 2025.02.02 |
Movie Recommendation Algorithm System Project Web-Crawling (4) | 2024.07.24 |