https://github.com/jun7867/Web_Image_Crawling
네이버에서 이미지들을 크롤링하여 이미지 파일을 저장하고, zip 파일로 압축하는 과정입니다.
머신러닝을 학습하기 위해서는 상당한 양의 데이터가 필요합니다. 이때, 이미지를 하나하나 다운받기에는 무리가 있습니다.
따라서, 웹 이미지 크롤링을 사용하여 몇백개의 이미지를 다운받을 겁니다.
먼저 웹 크롤링을 하기 위해서 환경 설정이 필요합니다.
환경 설정 및 실행 순서는 다음과 같습니다.
- selenium 설치
- chromedriver 설치 및 Path 설정
- tqdm 설치
- 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)
'데이터 처리 > 데이터 처리' 카테고리의 다른 글
프로그래머스 고득점 SQL 문법 총 정리 (0) | 2020.11.10 |
---|---|
파이썬 | 정규표현식 (re) re.compile 사용을 위한 표현법 정리 OR(|), *, + , ?, {} (0) | 2020.06.24 |
파이썬 | 정규표현식(re) re.compile 사용을 위한 표현법 (0) | 2020.06.24 |
데이터 처리 | 파이썬으로 엑셀 파일 읽어서 출력하기 (2) | 2020.06.22 |