본문 바로가기
데이터 처리/데이터 처리

네이버 웹 이미지 크롤링(Crawling)하기.

by Jun_N 2020. 7. 8.

https://github.com/jun7867/Web_Image_Crawling

 

jun7867/Web_Image_Crawling

Naver, Google Website Image Crawling . Contribute to jun7867/Web_Image_Crawling development by creating an account on GitHub.

github.com

 

네이버에서 이미지들을 크롤링하여 이미지 파일을 저장하고, zip 파일로 압축하는 과정입니다.

머신러닝을 학습하기 위해서는 상당한 양의 데이터가 필요합니다. 이때, 이미지를 하나하나 다운받기에는 무리가 있습니다.

따라서, 웹 이미지 크롤링을 사용하여 몇백개의 이미지를 다운받을 겁니다.

 

먼저 웹 크롤링을 하기 위해서 환경 설정이 필요합니다.

 

 

환경 설정 및 실행 순서는 다음과 같습니다.

  1. selenium 설치
  2. chromedriver 설치 및 Path 설정
  3. tqdm 설치
  4. python3 ./naver_crawling.py

*파이썬은 설치 되어있어야 합니다. 

 

먼저 selenium을 설치해야 합니다.

selenium은 웹앱을 테스트하는데 사용되는 프레임 워크입니다.

pip install selenium

pselenium을 설치 하였다면 chromedriver를 설치해야 합니다.

https://sites.google.com/a/chromium.org/chromedriver/downloads

* 이때, 사용하고 있는 chrome과 버전이 일치해야 합니다 

PATH설정에서 어려움을 겪을 수도 있습니다. 

chromedriver 오류시 아래 블로그를 참고해주세요.

http://kiddwannabe.blog.me/221539689821

 

Mac에서는 $HOME/bin에 파일을 옮기고 환경설정 하였습니다.

from selenium import webdriver

 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys #import Keys
from urllib.request import urlretrieve
from tqdm import tqdm
import time #import time; enablues you to use .sleep() while crwaling imges
import os
import zipfile

def get_images(keyword):

    print("접속중")
    driver = webdriver.Chrome(executable_path='/Users/namjjun/bin/chromedriver')
    driver.implicitly_wait(30)

    url='https://search.naver.com/search.naver?sm=tab_hty.top&where=image&query={}'.format(keyword)
    driver.get(url)

    #페이지 스크롤 다운
    body=driver.find_element_by_css_selector('body')
    for i in range(3):
        body.send_keys(Keys.PAGE_DOWN)
        time.sleep(1) #delay 주기

    #이미지 링크 수집
    imgs= driver.find_elements_by_css_selector("img._img")
    result=[]
    for img in tqdm(imgs):
        if 'http' in img.get_attribute('src'):
            result.append(img.get_attribute('src'))

    driver.close() # 크롬창 자동 종료
    print("수집 완료")

    #폴더생성
    print("폴더 생성")
    #폴더가 없을때만 생성
    if not os.path.isdir('./{}'.format(keyword)):
        os.mkdir('./{}'.format(keyword))

    #다운로드
    for index, link in tqdm(enumerate(result)): #tqdm은 작업현황을 알려줌.
        start=link.rfind('.') #뒤쪽부터 검사
        end=link.rfind('&')
        filetype=link[start:end] # .jpg , .png 같은게 뽑힘

        urlretrieve(link,'./{}/{}{}{}'.format(keyword,keyword,index,filetype))

    print('다운로드 완료')

    #압축 - 메일


    zip_file=zipfile.ZipFile('./{}.zip'.format(keyword),'w')

    for image in os.listdir('./{}'.format(keyword)): # Image는 파일명
        zip_file.write('./{}/{}'.format(keyword,image), compress_type=zipfile.ZIP_DEFLATED) #파일경로/파일명
    zip_file.close()
    print("압축완료")

if __name__ == '__main__':
    keyword=input("수집할 키워드를 입력하세요: ")
    get_images(keyword)