성장 기록 블로그🌴

%1012 파이썬 이미지 크롤링하기 ( 이미지 수집 , 한번에 이미지 다운로드 , 대량 이미지 , 귀여운 강아지짤 모으기 ) 본문

AI & BigData 교육과정/Python 관련

%1012 파이썬 이미지 크롤링하기 ( 이미지 수집 , 한번에 이미지 다운로드 , 대량 이미지 , 귀여운 강아지짤 모으기 )

wlswls2s 2022. 10. 13. 09:36
728x90

< 파이썬 웹크롤링 내용 >

- 이미지 수집 -


◆ 파이썬 웹크롤링 기본

개념정리

 

이미지 크롤링

# Web driver 실행 및 브라우저 제어를 위한 라이브러리 
from selenium import webdriver as wb

# 키보드의 값을 제어할 수 있는 라이브러리)
from selenium.webdriver.common.keys import Keys

# 요소를 접근하기 위한 방식을 활용할 수 있는 라이브러리
from selenium.webdriver.common.by import By

# 이미지 주소를 이용해서 다운로드 받을 수 있는 라이브러리
from urllib.request import urlretrieve


import time

# 파일 시스템 관련 기능 (파일/폴더 생성, 삭제, 존재여부 등)들을 사용할 수 있는 라이브러리
import os

이미지 다운로드 받는 방법!

# 고정된 이미지 주소를 이용해서 다운로드

# 이미지 주소 복사 -> 붙여넣으면 됨


img_url = "https://search.pstatic.net/common/?src=http%3A%2F%2Fblogfiles.naver.net%2FMjAyMjA2MDNfMjg1%2FMDAxNjU0MjU2NjgyOTg4.rMwVc7Ir1rI8GOT3tNidQ82LCmeYM3otqNyQCORxtQkg.hi-yBbhhGaphL0PvNWaESU0nYfXkk71xmB4Uv91rgMgg.JPEG.lyju209%2FIMG_7662.JPG&type=sc960_832"

#urlretrieve(다운로드받을 이미지 주소, 저장할 경로)
# 저장할 경로 : 현재 위치에 저장할 경우 -> 파일명.확장자(jpg, png, gif)
#              특정 위치에 저장할 경우 -> 폴더명/파일명.확장자
urlretrieve(img_url, "/Users/smhrd/크롤링/강아지모음/mung1.jpg")

폴더 존재여부 확인 및 생성

# 폴더 존재여부 확인
os.path.isdir("강아지모음") #False면 그 폴더가 없는 것, True면 그 폴더가 있는것

# 폴더 생성
os.mkdir("강아지모음")

조건 식으로 폴더 존재 여부 확인 및 생성

if os.path.isdir("강아지모음") == True:
    print("생성된 폴더입니다.")

else:
    os.mkdir("강아지모음")
    print("강아지모음 폴더가 생성되었습니다.")

< 만든 폴더가 이미 존재할 때! 결과 >

생성된 폴더입니다.

스크롤!

nv_url = "https://search.naver.com/search.naver?where=image&section=image&query=%EA%B7%80%EC%97%AC%EC%9A%B4%20%EA%B0%95%EC%95%84%EC%A7%80%20%EC%A7%A4&res_fr=0&res_to=0&sm=tab_irq&color=&ccl=0&nso=so%3Ar%2Ca%3Aall%2Cp%3Aall&recent=0&datetype=0&startdate=0&enddate=0&gif=0&optStr=&nso_open=0&pq="

driver = wb.Chrome()
driver.get(nv_url)

브라우저 스크롤을 내리기 위하여 'body'태그 요소에 접근!

# 브라우저 스크롤 내리기위하여 <body> 요소에 접근하기
# 스크롤 내리는 방법 (키보드) : 화살표 아래 방향키, PAGE_Down, end, 등


# 스크롤을 맨 마지막으로 내리도록 함!
driver.find_element(By.TAG_NAME, "body").send_keys(Keys.END)

이미지 주소 데이터를 수집하여 리스트에 저장!

저장된 주소 데이터를 이용해서 특정 폴더에 이미지를 저장

# 이미지 주소 데이터를 수집하여 리스트에 저장!
# 저장된 주소 데이터를 이용해서 특정 폴더에 이미지를 저장

img = driver.find_elements(By.CSS_SELECTOR, "img._image._listImage")

len(img)
482

< 이미지 하나 주소 가져와보기 >

# get_attribute(속성명) : HTML 요소의 속성값을 접근하는 함수
img[0].get_attribute("src")

대량의 이미지 주소 데이터를 수집

srclist = []


# 이미지 경로 주소값 싹 다 나오는지 확인하기!
# 이 코드를 실행하면 몇개는 data:image 형식으로 적용이 안되는 사진들이 존재함
# 이러한 사진들을 걸러서 저장하도록 하기! src변수에 저장한 후 인덱싱하기!

for i in range(len(img)):
    src = img[i].get_attribute("src")
    
    # 앞에 data가 붙은 주소는 제외하고 정상적인 주소만 나옴
    if src[0:4] != "data":
        print(src)
        srclist.append(src)

이미지 저장하기!

for i in range(len(srclist)):
    
    # 강아지 사진을 저장할때 이름이 겹치지않게 f포맷으로 저장해줌
    urlretrieve(srclist[i], f"강아지모음/강아지{i+1}.jpg")

 

< 결과 >

 

=> 파일에 엄청 난 귀여운 강아지 사진들이 다운로드 된 것을 확인할 수 있음

728x90