라즈베리파이_구글 이미지 수집하기

구글 이미지 수집하기 with selenium

  • 소스 해석

       from selenium import webdriver as wb
       from selenium.webdriver.common.keys import Keys
       from bs4 import BeautifulSoup as bs 
       from tqdm import tqdm 
       from urllib.request import urlretrieve 
       import time
       import os
    • 설명(위에서 부터)
      1. 브라우저를 조작하는 도구
      2. 키 입력을 도와주는 도구(키보드)
      3. 문서를 파싱해서 선택자 활용을 도와주는 도구
      4. 반복문 진행 정도를 시각화해주는 도구
      5. 이미지 다운로드를 도와주는 도구
      6. 시간제어 도구
      7. 폴더 생성,삭제,이동 등을 도와주는 도구
    keyword = "검색할 키워드"
    • 검색할 키워드를 입력한다.

      if os.path.isdir('./{}'.format(keyword)) == False :
       os.mkdir('./{}'.format(keyword))
    • 이미지 저장될 폴더를 생성하고 해당 폴더가 있는 지 확인

       url = 'https://www.google.com/search?q={}&source=lnms&tbm=isch&sa=X&ved=2ahUKEwjs85-GsN7vAhX4xYsBHR6aBg0Q_AUoAXoECAEQAw&biw=1745&bih=852'.format(keyword)
      
      driver = wb.Chrome() # 브라우져 생성
      driver.get(url) # url 요청
      time.sleep(5) # 페이지 로딩까지 5초 대기
      
      cnt = 0
      pre_img_src = [] # 이전에 다운로드된 경로
      
      for j in range(10) :
          img_html = bs(driver.page_source,'html.parser')
      
        # 이미지 태그 수집
          images = img_html.select('img.rg_i.Q4LuWd')
      
        # 이미지 태그의 src 속성 값 추출
          img_src = []
          for img in images :
              src = img.get('src')
              if src != None : # img 태그에 src 속성이 없는 경우
                  if src not in pre_img_src : # 이전에 다운로드한 경로에 있는지 검사
                      img_src.append(src)
              else : # img 태그에 src 속성이 있는 경우
                  src = img.get('data-src')
                  if src not in pre_img_src :
                      img_src.append(src)
      
        # 파일 다운로드
        # img_src를 반복문으로 돌면서 저장, tqdm 사용
          for src in tqdm(img_src) :
              cnt += 1
              try : 
                  urlretrieve(src,'./{}/{}.png'.format(keyword,cnt))
              except :
                  print("수집불가")
                  continue
          pre_img_src += img_src # 다운로드한 경로를 이전 리스트에 추가    
            
          # 화면 스크롤
         for i in range(6):
              driver.find_element_by_css_selector('body').send_keys(Keys.PAGE_DOWN)
              time.sleep(1)
    • 주석을 참고하면 된다.

좋은 웹페이지 즐겨찾기