파이썬 크롤링 selenium 네이버 이미지 검색을 통한 데이터 수집
▶ 목표
- 사용자로부터 동물 이름을 입력 받아 네이버 이미지 탭에 검색된 동물의 이미지를 수집
- 네이버 이미지 탭에서 자동으로 스크롤을 내려 이미지를 계속 검색 후 수집
- 입력 받은 동물 이름의 폴더를 생성하고 이미지를 검색 이름 폴더에 저장
① 필요한 라이브러리 불러오기
# 셀레니움 웹드라이버
from selenium import webdriver as wb
# 셀레니움 다양한 선택자 접근 가능 라이브러리
from selenium.webdriver.common.by import By
# 셀레니움에서 key 명령어 입력 라이브러리
from selenium.webdriver.common.keys import Keys
# 딜레이
import time
# 파일을 다루는 라이브러리 : 파일이나 폴더 생성, 삭제, 수정, 존재 여부 확인
import os
# 이미지 경로를 기반으로 서버에 요청하여 이미지 파일을 저장하게 하는 라이브러리
from urllib.request import urlretrieve
② 폴더를 생성하는 함수 만들기
os.path.isdir('') : 폴더 존재 여부를 확인하고 True, False 반환 (존재하면 True, 존재하지 않으면 False)
os.mkdir('') : 폴더 생성
def createFolder (name) :
if os.path.isdir(f'./{name}') == False :
os.mkdir(f'./{name}')
print(f'{name} 폴더 생성 완료')
else :
print('이미 존재하는 폴더입니다.')
③ 사용자로부터 검색할 동물 이름을 입력 받고, 셀레니움으로 네이버 이미지탭 주소에 접근하기
input_name = input('이미지를 검색할 동물 이름 입력 >> ')
dirver = wb.Chrome()
driver.get(f'https://search.naver.com/search.naver?where=image&sm=tab_jum&query={input_name}')
④ 네이버 이미지 탭에 접근한 후 스크롤을 내려서 이미지를 더 검색되게 해보기
# body태그에 접근하여 스크롤을 내리기
driver.find_element(By.CSS_SELECTOR, 'body').send_keys(Keys.END)
# for문을 이용해 스크롤을 여러번 내리게 하기
for i in range(6) : # 스크롤을 6번 내리게 하기
driver.find_element(By.CSS_SELECTOR, 'body').send_keys(Keys.END)
time.sleep(2) # 딜레이를 줘서 너무 빠르게 넘어가게 하지 않기
print('스크롤 다운 완료')
④ 검색된 이미지 태그에 접근하여 속성값(src)를 수집하고, 주소값을 제대로 가져오지 못한 데이터 값은 삭제하기
.get_attribute('속성')
# 이미지 태그 수집
img = driver.find_elements(By.CSS_SELECTOR, '._image._listImage')
# 수집한 이미지 태그에서 src 속성값 수집
src = [i.get_attribute('src') for i in img]
src
# src_lst에 src의 data:image가 있는 문자열을 뺀 데이터만 담기
src_lst = []
for i in src :
if 'data:image' not in src :
src_lst.append(i)
⑤ src_lst에 담긴 이미지 주소를 검색 이름 폴더 안에 이미지 파일(jpg)로 저장하기
urlretrieve(이미지주소,'저장할주소.이미지형식')
# src_lst의 이미지 주소를 for문, urlretrivev를 이용해보기
# 사용자가 입력한 검색어 이름 폴더/검색어_번호.jpg파일로 저장하기
for i in range(len(src_lst)) :
urlretrieve(src_lst[i], f'./{input_name}/{input_name}_{i+1}.jpg')
▶ 전체 코드 (레서판다 검색)
input_name = input('이미지를 수집할 동물 이름 입력 >> ')
driver = wb.Chrome()
driver.get(f'https://search.naver.com/search.naver?where=image&sm=tab_jum&query={input_name}')
time.sleep(2) # 브라우저가 열리고 딜레이를 주어서 너무 빨리 코드가 실행되지 않게 조절
for i in range(6) : # body태그에 접근해 스크롤을 6번 내리기
driver.find_element(By.CSS_SELECTOR, 'body').send_keys(Keys.END)
time.sleep(2) # 스크롤을 내릴 때 너무 빨리 코드가 실행되지 않도록 딜레이
print('스크롤 다운 완료')
img = driver.find_elements(By.CSS_SELECTOR, '._image._listImage') # 이미지 태그 접근
src = [i.get_attribute('src') for i in img] # 이미지 태그의 src속성값 수집
src_lst = []
for i in src : # 잘못된 주소를 가져온 src 데이터를 빼고 src_lst에 담기
if 'data:image' not in i :
src_lst.append(i)
createFolder(input_name) # 검색 이름 폴더 만들기 함수 실행
for i in range(len(src_lst)) : # .jpg 이미지 파일로 저장
urlretrieve(src_lst[i], f'./{input_name}/{input_name}_{i+1}.jpg')
driver.close() # 브라우저 닫기
print(f'{input_name} 이미지 수집, 저장 작업 완료')
'Python' 카테고리의 다른 글
파이썬 크롤링 selenium 네이버 검색 해보기, 한솥 도시락 메뉴 정보 수집 (0) | 2023.01.21 |
---|---|
파이썬 크롤링 requests, BeautifulSoup 네이버 영화 관람객 리플 데이터 수집 (1) | 2023.01.19 |
파이썬 크롤링 requests, BeautifulSoup 네이버 영화 평점 수집 데이터 수집 (0) | 2023.01.18 |
파이썬 크롤링 requests, BeautifulSoup 멜론 Top100 차트 데이터 수집 (0) | 2023.01.18 |
파이썬 크롤링 requests, BeautifulSoup (0) | 2023.01.16 |
댓글