퍼스널 컬러 데이터 수집 (2) -크롤 코드 구현-
코드 설명
이 프로젝트의 크롤링 코드는 각 퍼스널컬러 유형에 해당하는 이미지 데이터를 검색하고, 다운로드하는 과정으로 구성되어 있습니다. 기본적으로 데이터셋은 Cashe로 구성되어 있으며, Cashe의 리스트는 이전 게시글에 라벨링 된 연애인들의 데이터들입니다.
이전 게시글을 참고하시기 바랍니다.
cashe = [spring, summer, autumn, winter]
season = ['spring', 'summer', 'autumn', 'winter']
save_base_dir = '/Users/dongdong_JH/Downloads'
먼저, 크롤링할 퍼스널컬러 데이터를 분류하기 위해 cashe 리스트에 각각의 계절(봄, 여름, 가을, 겨울)에 해당하는 컬러 데이터를 저장합니다. season 리스트에는 각 계절의 영문명을 담아, 이후 폴더 생성 시 활용합니다.
저장 경로는 save_base_dir에 지정하며, 여기에서는 사용자의 다운로드 폴더에 저장하도록 설정하였습니다.
폴더 생성 및 크롤링 진행
for personal_col, i_season in zip(cashe, season):
season_dir = os.path.join(save_base_dir, i_season)
os.makedirs(season_dir, exist_ok=True)
각 퍼스널컬러 유형(봄, 여름, 가을, 겨울)에 대해 개별적으로 데이터를 수집하기 위해 for 루프를 사용합니다. season_dir을 통해 해당 계절별로 이미지를 저장할 폴더를 자동으로 생성합니다.
Google 이미지 검색을 통한 이미지 크롤링
for star in personal_col:
start = time.time()
driver = webdriver.Chrome(options=chrome_options)
url = "https://images.google.com/"
driver.get(url)
각 퍼스널컬러 카테고리(예: 봄웜, 여름쿨 등)에 해당하는 키워드(star)를 사용하여 Google 이미지에서 검색을 진행합니다.
크롤링을 위해 Chrome 웹드라이버를 실행하고, Google 이미지 검색 페이지(https://images.google.com/)에 접속합니다.
images.google은 이미지를 쉽게 찾을 수 있는 구글에서 제공되는 사이트 입니다. 이미지를 크롤링 할 때 적합한 사이트 중 하나입니다.
search_box = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".gLFyf"))
)
search_box.click()
search_box.send_keys(f'{star}')
search_box.send_keys(Keys.RETURN)
검색창 요소(.gLFyf)가 로드될 때까지 기다린 후(WebDriverWait 사용) 클릭합니다.
검색어로 star 값을 입력하고, RETURN 키를 눌러 검색을 실행합니다.
WebDriverwait(driver,10).until(~~)이 부분은 실제 사이트에서 태그를 찾을 때 까지 작동하며 굳이 sleep() 을 설정 하지 않아도 태그를 10초안에 찾으면 바로 다음 코드로 유연하게 넘어가게 할 수 있는 역할을 합니다. sleep()을 랜덤으로 설정하지않고 안전하게 최대한 빨리 수집을 목표로 사용했습니다.
WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.H8Rx8c img.YQ4gaf"))
)
윗 설명과 여전히 동일한 역할을 가지고 있는 코드입니다. 이부분은 실제로 Images의 태그를 찾는 부분입니다.
이미지 다운로드 및 저장
try:
first_image = driver.find_elements(By.CSS_SELECTOR, "div.H8Rx8c img.YQ4gaf")
for index, img in enumerate(first_image[:20], 1):
img_url = img.get_attribute("src")
file_path = os.path.join(season_dir, f"{star}_{i_season}_{index}.jpg")
urlretrieve(img_url, file_path)
검색된 이미지 중 상위 20개의 이미지를 다운로드합니다.
이미지의 URL을 가져와(get_attribute("src")), 해당 이미지가 저장될 파일명을 설정합니다.
urlretrieve() 함수를 사용하여 이미지를 다운로드 후 로컬 폴더에 저장합니다.
except Exception as e:
print("Error:", e)
print(f"{star}_{i_season}_{index} is failed")
오류가 발생할 경우, 오류 메시지를 출력하고 실패한 이미지를 로그로 남깁니다.
실행 시간 측정 및 크롤링 종료
print(time.time() - start)
driver.quit()
한 번의 검색 및 다운로드 작업이 완료되면 걸린 시간을 출력하여 성능을 측정할 수 있도록 합니다.
마지막으로 driver.quit()을 호출하여 웹드라이버를 종료합니다.
이 크롤링 코드를 활용하면 퍼스널컬러에 따른 다양한 이미지 데이터를 수집할 수 있습니다.
이를 통해 다음과 같은 분석이 가능합니다.
퍼스널컬러별 대표적인 색상 및 이미지 트렌드 분석
퍼스널컬러 유형에 따라 추천되는 색상의 시각적 데이터 구축
패션, 메이크업, 디자인 등에서 퍼스널컬러 활용 연구
따라서 최종 코드는 아래와 같습니다. 현재 구글이미지의 태그가 변동되었으니 적합한 태그를 찾아 직접 해보시는 것을 추천합니다!
cashe = [spring, summer, autumn, winter]
season = ['spring', 'summer', 'autumn', 'winter']
save_base_dir = '/Users/jujinho/Downloads'
for personal_col, i_season in zip(cashe, season):
season_dir = os.path.join(save_base_dir, i_season)
os.makedirs(season_dir, exist_ok=True)
for star in personal_col:
start = time.time()
driver = webdriver.Chrome(options=chrome_options)
url = "https://images.google.com/"
driver.get(url)
search_box = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".gLFyf"))
)
search_box.click()
search_box.send_keys(f'{star}')
search_box.send_keys(Keys.RETURN)
WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.H8Rx8c img.YQ4gaf"))
)
try:
first_image = driver.find_elements(By.CSS_SELECTOR, "div.H8Rx8c img.YQ4gaf")
for index, img in enumerate(first_image[:20], 1):
img_url = img.get_attribute("src")
file_path = os.path.join(season_dir, f"{star}_{i_season}_{index}.jpg")
urlretrieve(img_url, file_path)
except Exception as e:
print("Error:", e)
print(f"{star}_{i_season}_{index} is failed")
print(time.time() - start)
driver.quit()
향후에는 이미지 필터링 및 데이터 정제 과정을 추가하여 보다 정확한 데이터를 확보하는 방향으로 프로젝트를 발전시킬 예정입니다.
'Web-Crawling' 카테고리의 다른 글
Personal Color Data gathering: Google Image | (1) | 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 |