Glacier's Daily Log

Python) 파이썬을 이용한 이미지 크롤링 프로그램 만들기 본문

Coding/Python

Python) 파이썬을 이용한 이미지 크롤링 프로그램 만들기

h__glacier_ 2020. 5. 8. 18:50
반응형

 어쩌다보니 티스토리 블로그를 이용한 첫 번째 포스팅이 파이썬 코딩 관련 글이다.

티스토리 블로그를 시작하게 된 이유는 따로 다른 포스팅으로 다루어 볼 것이다.

 


이미지 크롤링 파이썬 코드

 우연히 파이썬의 매력에 빠져서, 파이썬으로 많은 실용적인 프로그램들을 만들어 보고 있다.

자바로 프로그램을 짤때도 재미는 있고 실용적이였지만, 파이썬을 써보니 너무도 간결한 문법과 간단한 로직을 가지고 있어서, 내가 원하는것을 더 직관적으로 쉽게 만들 수 있다는 장점이 뚜렷했다.

 

 자바만 알때는 몰랐고, 왜 굳이 파이썬을 쓰는지 몰라서 시작하지 않았던 나를 자책하게 되었다.

코딩보다는 아이디어, 알고리즘 짜는데 더 집중할 수 있게 되니 만들고 싶은것은 물론, 시야도 넓어지게 되었다.

 

 인공지능, 머신러닝에 관심을 가지게 되어서, 텐서플로우 (Tensorflow)를 통해 머신러닝을 배워보려고 했다.

하지만 내가 직접 머신러닝을 하는데는 너무 초보였고, 또 때마침 구글(갓구글)에서 일반인들도 쉽게 머신러닝을 체험해보고 마음대로 사용할 수 있도록 오픈소스로 만들어 놓은 "Teachable Machine" 라는 것을 알게 되었다.

 

 그래서 이 머신러닝에 이용할 이미지들을 모아야 하는데, 하나하나씩 다운받고 하기 너무 귀찮은 것이다.

사람은 진화하는 동물이랬듯이, 이것도 내가 파이썬을 하기 때문에 더 쉽게 해보려고 했다.

 

 결과적으로는 저번에 만들었던 웹크롤링 프로젝트를 활용해서 이미지  크롤링 프로그램을 만들어 보았다.

 

# 이미지 크롤링 프로그램
# Started on 2020-05-07
# Coded by Glacier Han
# h-glacier.tistory.com

from bs4 import BeautifulSoup as bs
from urllib.request import urlopen
from urllib.parse import quote_plus
import datetime

# 프로그램 시작, 인트로 기능
print('\n >>> 이미지 파일 크롤링 프로그램입니다. 환영합니다! <<<\n')
now = datetime.datetime.now()
nowDate = now.strftime('      현재 시간 %Y년 %m월 %d일 %H시 %M분 입니다.\n\n')
print(nowDate)

# 메인 기능
while True:
    Main_Url = 'https://search.naver.com/search.naver?where=image&sm=tab_jum&query='
    Search_Url = input(' >> 검색어를 입력해 주세요 : ')
    crawl_num = int(input(' >> 크롤링할 이미지 갯수를 입력해 주세요 : '))

    url = Main_Url + quote_plus(Search_Url)
    html = urlopen(url)
    soup = bs(html, "html.parser")
    img = soup.find_all(class_='_img')

    num = 1
    for i in img:
        print('    ※ ',num, '번째 파일 다운로드가 완료되었습니다!')
        img_Url = i['data-source']
        with urlopen(img_Url) as f:
            # 이미지 저장위치 + 파일이름 지정
            with open('./web1/img' + Search_Url + str(num)+'.jpg','wb') as h:
                img = f.read()
                h.write(img)
        num += 1
        if num > crawl_num:
            break

    print('\n  모든 크롤링이 완료되었습니다! \n ')

    # 종료 확인
    requ = int(input('>>> 프로그램을 종료하려면 1을, 계속 크롤링 하시려면 2를 입력해 주세요 : '))
    print('\n')
    if requ == 2 :
        continue
    else :
        break

 

 전체 코드를 첨부한다.

간단한 설명은 주석으로 달아놓았다.

 

 분석해보자면, 우선 Beautiful Soup 4 라이브러리를 기반으로 사용한다.

웹크롤링의 기초적인 라이브러리이기 때문에 이 글을 보는 사람들은 다 알거라고 믿는다.

다음 포스팅에서 한번 따로 다뤄보겠다.

 

 아무튼 이 bs4를 사용한다.

Main_Url에 네이버 검색 기본 url을 넣고

Search_Url에 검색 키워드가 들어가는 형식이다.

 

그래서 추출한 값중 이미지에 붙어있는 클래스인 "_img"을

for문을 이용해서 모두 끌어오는 무식한 로직을 가지고 있다.

 

생각보다 정말 유용하게 쓰고 있다.

10개의 사진을 우클릭 해서 다운받는것 보다

30배 이상의 효율성을 가진 것 같다.

 

결과물

 

다음 포스팅에는 내가 만들어본 

아침을 반겨주는 프로그램을 포스팅해보겠다.

 

반응형
Comments