파이썬을 이용하여 이미지 크롤링 후 다운로드하는 것 까지 해보겠다.
프로젝트 진행 전 필요한 개발환경으로는 아래의 3가지가 필요하다.
0. Python 설치
1. VSCode설치
2. Python 가상 환경 설정
3. 크롬 드라이버다운
0. Python 설치
- 아래의 링크로 가 자신의 운영체제에 맞는 파이썬을 설치하면 된다.
Download Python
The official home of the Python Programming Language
www.python.org
1. VSCode설치
- 아래의 링크로 들어가 자신의 운영체제에 맞는 VS Code를 설치하면 된다.
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 명령어를 입력한다
!!!!!!!! 위의 과정에서 오류가 있을 수 있다. 오류 발생 시 아래의 링크 참조!!!!!!!!!!
[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 |