성장 기록 블로그🌴
%1012 파이썬 이미지 크롤링하기 ( 이미지 수집 , 한번에 이미지 다운로드 , 대량 이미지 , 귀여운 강아지짤 모으기 ) 본문
AI & BigData 교육과정/Python 관련
%1012 파이썬 이미지 크롤링하기 ( 이미지 수집 , 한번에 이미지 다운로드 , 대량 이미지 , 귀여운 강아지짤 모으기 )
wlswls2s 2022. 10. 13. 09:36728x90
< 파이썬 웹크롤링 내용 >
- 이미지 수집 -
◆ 파이썬 웹크롤링 기본
개념정리
이미지 크롤링
# 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§ion=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