[Python]Python selenium을 이용하여 웹에서 이미지 크롤링 후 다운

2021. 9. 15. 09:00· Python
반응형

파이썬을 이용하여 이미지 크롤링 후 다운로드하는 것 까지 해보겠다.

프로젝트 진행 전 필요한 개발환경으로는 아래의 3가지가 필요하다.

 

0. Python 설치

1. VSCode설치

2. Python 가상 환경 설정

3. 크롬 드라이버다운

 

0. Python 설치

 - 아래의 링크로 가 자신의 운영체제에 맞는 파이썬을 설치하면 된다.

www.python.org/downloads/

 

Download Python

The official home of the Python Programming Language

www.python.org

 

1. VSCode설치

 - 아래의 링크로 들어가 자신의 운영체제에 맞는 VS Code를 설치하면 된다.

code.visualstudio.com/

2. Python 가상환경 설정

 - 다운받은 VSCode를 실행한 후 Open Folder를 눌러 작업환경이 될 파일을 선택한다. 아무 곳이나 상관은 없지만 작업을 위한 접근이 필요하기 때문에 자신이 아는 위치로 설정해야 한다. 나 같은 경우 C:\Users\lth11\travelar\selenium_test 폴더를 작업 폴더로 지정하였다.

 

 2.1 Python venv 가상 환경  설정

ⓛ VSCode에서 Terminal을 연다

② Terminal 에서 python -m venv selenium를 입력한다

 

커멘드를 입력한 후 selenium이 생성된 것을 볼 수 있다.

 

- 이후 cd selenium/Scripts 을 입력하여 selenium/Scripts 작업환경으로 이동한다.

- 이동 후 .\activate 명령어를 입력한다 

!!!!!!!! 위의 과정에서 오류가 있을 수 있다. 오류 발생 시 아래의 링크 참조!!!!!!!!!!

taehui.tistory.com/67

 

[Python][VScode 터미널 오류] 이 시스템에서 스크립트를 실행할 수 없으므로 ~~.ps1 파일을 로드할 수

파이썬 가상환경을 설정해 주기 위해 activate를 하는 과정에서 아래와 같은 오류가 발생하였다. 이는 스크립트 실행권환이 제한되어 있는 상태이기 때문에 나타나는 오류이다. 따라서 실행권한

taehui.tistory.com

 

- pip install selenium 명령어 입력해서 selenium 다운

3. 크롬 드라이버다운

 - 크롬 드라이버 다운 전 크롬의 버전을 확인해야 한다.

 - 아래의 링크로 들어가서 확인한 크롬 버전과 같은 크롬 드라이버를 다운로드한다.

chromedriver.chromium.org/downloads

 

Downloads - ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

chromedriver.chromium.org

 - 다운 후 압축을 푼 chromedriver를 selenium으로 옮겨준다.

 

 

 - selenium에 New File을 눌러 google.py를 생성해 준다. 이 파일과 chromedriver은 같은 경로에 있어야 한다.

 

 

 

 - google.py에 코드를 작성해 주면 원하는 사진을 크롤링한다. (코드는 맨 아래에 적어놓았다.

 

 

 - 혹시 아래와 같이 오류가 뜬다면 아까 설치한 selenium가 install 된 Python이 아닌 pc에 설치된 파이썬을 실행하고 있어 그런 것이다 이럴 경우 

 

 

ⓛ 클릭

② selenium이 활성화되어있는 파이썬 선택

 

 

 - google.py 코드

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import urllib.request


driver = webdriver.Chrome() #브라우저로 아까 다운받은 크롬 드라이버 선택
driver.get("https://www.google.co.kr/imghp?hl=ko&tab=ri&ogbl") #이미지 페이지를 연다
elem = driver.find_element_by_name("q") #검색창을 찾는 문장 name이 q이다. 개발자 화면을 열어서 확인하면 된다.
elem.send_keys("강아지") #검색창에 '강이지' 입력
elem.send_keys(Keys.RETURN) #엔터키 입력

#스크롤을 맨 아래까지 내려줘서 이미지를 나오게 한다.
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
    # Scroll down to bottom
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    
    # Wait to load page
    time.sleep(1)

    # Calculate new scroll height and compare with last scroll height
    new_height = driver.execute_script("return document.body.scrollHeight")
    print(new_height)
    if new_height == last_height:
        try :
            driver.find_element_by_class_name('mye4qd').click()
            time.sleep(3)
        except :
            break
    last_height = new_height

images = driver.find_elements_by_css_selector(".rg_i.Q4LuWd")#검색 후 나온 모든 이미지를 images에 넣는다. #여러가지를 찾을때는 elements 
count = 1
for image in images :
    try :
        image.click() #모든 이미지들중 하나를 클릭
        time.sleep(1)#위에 코드에서 이미지를 클릭한 후 이미지의 주소를(src)를 가지고와야 하는데 이미지가 불러와지기 전에 다음 코드가 실행되기때문에 일정 시간을 주는 코드이다.
        imgUrl = driver.find_element_by_xpath("/html/body/div[2]/c-wiz/div[3]/div[2]/div[3]/div/div/div[3]/div[2]/c-wiz/div/div[1]/div[1]/div/div[2]/a/img").get_attribute("src") #클릭한 이미지의 주소를 가지고온다. 기존에 class이름으로 찾는것을 하였지만 같은 이름이 어려개가 있어서 xpath로 수정하였다.
        urllib.request.urlretrieve(imgUrl, str(count)+".jpg") #이미지 저장
        count = count + 1
    except : 
        pass

driver.close()
#
#  assert "Python" in driver.title
# elem = driver.find_element_by_name("q")
# elem.clear()
# elem.send_keys("pycon")
# elem.send_keys(Keys.RETURN)
# assert "No results found." not in driver.page_source

 - python .\google.py 명령어 입력

 

 

이러면 자동으로 크롬이 실행되고 강아지라는 키워드 검색한다. 이후 모든 이미지를 확인하기 위해 자동으로 스크롤을 내리고 이미지 더보기 버튼을 자동으로 클릭해준다. 이미지 더보기 버튼이 나오지 않는다면 가장 앞의 이미지부터 하나씩 선택 후 자동 저장하는 프로그램이 완성된다.

 

실제 코드 실행 화면

터미털에 python .\google.py입력 -> 크롬 실행 -> 강아지 검색 -> 이미지 스크롤 아래로 계속 내림(더 이상 이미지가 없을 때까지) -> 이미지 저장 -> 저장된 이미지 확인

 

 

 

참조 : 조코딩

반응형
저작자표시 비영리 변경금지 (새창열림)

'Python' 카테고리의 다른 글

[Python] try except 문 활용 에러 고치기urllib.error.HTTPError: HTTP Error 429: Too Many Requests  (0) 2022.05.27
[Python][datetime] 날짜, 시간 다양한 출력법 정리  (0) 2022.05.26
[Python] selenium 엔터키 입력  (0) 2021.08.28
[Python][VScode 터미널 오류] 이 시스템에서 스크립트를 실행할 수 없으므로 ps1 파일을 로드할 수 없습니다.  (0) 2021.08.24
Python (numpy) : 배열 크기, 형상 확인(shape, ndim, size)  (0) 2021.08.22
'Python' 카테고리의 다른 글
  • [Python] try except 문 활용 에러 고치기urllib.error.HTTPError: HTTP Error 429: Too Many Requests
  • [Python][datetime] 날짜, 시간 다양한 출력법 정리
  • [Python] selenium 엔터키 입력
  • [Python][VScode 터미널 오류] 이 시스템에서 스크립트를 실행할 수 없으므로 ps1 파일을 로드할 수 없습니다.
TaeHuiLee
TaeHuiLee
창업, 사업, 자기개발, 운동, Web, App, Java, python, 이슈, 개발자, JavaScript, amazon, cloud server, 취업, 스펙, Android Studio, Spring, React, Node.js, 구독하면 댓글 남겨주세요.
TaeHuiLee
Developer_TaeHui
TaeHuiLee
  • 분류 전체보기 (228)
    • WEB (71)
    • Java (38)
    • APP (17)
    • 딥러닝 (2)
    • DB (5)
    • 알고리즘 (17)
    • Python (10)
    • AWS (5)
    • Git (8)
    • Docker (13)
    • 창업 (2)
    • Java Script (5)
    • 군집드론 (3)
    • C언어 (1)
    • IT 지식 (16)
    • Rust (1)
    • Tomcat (1)
    • Nginx (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • axios
  • VUE
  • GIT
  • DB
  • 정렬
  • Spring
  • ubuntu
  • mariadb
  • docker
  • 강릉 맛집
  • 파이썬
  • 관상 어플
  • 오블완
  • 티스토리챌린지
  • WSL
  • 알고리즘
  • 수원역 맛집
  • Nuxt
  • 도커
  • 선택정렬
  • python
  • javascript
  • spring boot
  • github
  • 어플
  • 자바
  • 수원 맛집
  • Java
  • 서울 맛집
  • Queue

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
TaeHuiLee
[Python]Python selenium을 이용하여 웹에서 이미지 크롤링 후 다운
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.