파이썬 + 셀레니움을 활용한 크롤링 (나사이미지)

https://eol.jsc.nasa.gov/SearchPhotos/photo.pl?mission=ISS068&roll=E&frame=41445 

 

 

Astronaut Photo ISS068-E-41445

Spacecraft nadir point: 17.8° S, 71.2° W Photo center point: Photo center point by machine learning: Nadir to Photo Center: Spacecraft Altitude: 226 nautical miles (419km)

eol.jsc.nasa.gov

 

 

0) Selenium 간단 설명

https://selenium-python.readthedocs.io/getting-started.html

 

 

 

1) 준비물

1 :  크롬드라이버

자신에 맞는 드라이버 다운로드 : https://chromedriver.chromium.org/downloads

내가 쓰는 크롬 버전 확인 : 크롬 우측 상단 점3개 > 설정 > 크롬정보

 

 2 :  작업용 폴더

바탕화면에 작업용 폴더 만들고 드라이버를 그 폴더에다가 넣어준다.

 

3: 셀레니움 설치

pip install selenium

 

 

2) 코드작성

1: 임포트하기 

from selenium import webdriver # 웹열때
from selenium.webdriver.common.keys import Keys # 키 가져오기용
from selenium.webdriver.common.by import By # Xpath이용
import time # 슬립걸때 사용
import urllib # 다운로드

 

 

2: 코드 생각해보기 

 

# 41445 번부터 41558번 까지 다운받고싶음 
# https://eol.jsc.nasa.gov/SearchPhotos/photo.pl?mission=ISS068&roll=E&frame=41445 여기에 들어가서
# 큰 화소수 다운 받아야함   => class="btn btn-light" 버튼 눌러서 모달창 띄우기 
# 모달창에서 이미지주소 긁어서 urllib으로 다운로드함 

# 다운받았으면 페이지 번호 1올려야함 => num += num을 반복 -> while문 써야함

 

 

눌러야하는 부분 xpath 확인하기

 

# 41445번째 xpath : //*[@id="wrap"]/div/div/div[4]/div[1]/a[1]

# 41446번째 xpath : //*[@id="wrap"]/div/div/div[4]/div[1]/a[1]

각 페이지별 고화소 픽셀 위치선택하는 xpath는 동일함

 

# 41445번째 xpath : //*[@id="myModal1"]/div/div/div[2]/img
# 41446번째 Xpath : //*[@id="myModal1"]/div/div/div[2]/img   

각 페이지 모달창에 뜬 사진의 xpath가 동일함

=> Xpath 고정값으로 두고 페이지의 num만 바꾸면 됨

 

 

 

 

3: 코드 작성해보기

# 41445 번부터 41558번 까지 다운받고싶음 
# https://eol.jsc.nasa.gov/SearchPhotos/photo.pl?mission=ISS068&roll=E&frame=41445 여기에 들어가서
# class="btn btn-light" 버튼 눌러서 모달창 띄우기 
# 모달창에서 이미지주소 긁어서 urllib으로 다운로드하기 
# 41445번째 xpath : //*[@id="myModal1"]/div/div/div[2]/img
# 41446번째 Xpath : //*[@id="myModal1"]/div/div/div[2]/img   xpath는 동일하니 num만 바꾸면 되겠네?
# 다운받았으면 num += num을 반복 -> while문 써야함


# 초기번호 페이지번호설정 

num = 41445  # 명시적으로 page_num으로 하는게 좋으나 간단하게 num으로 설정해둠

#화면열기
driver = webdriver.Chrome() # while 안에 넣어버리면 계속 새창이 뜸


while num < 41559 :
    print(num)

    # 다운받을 화면
    driver.get('https://eol.jsc.nasa.gov/SearchPhotos/photo.pl?mission=ISS068&roll=E&frame={0}'.format(num))
    time.sleep(2.1)
    print("화면열기 성공", num)

    # 화소선택버튼 찾기
    search = driver.find_element(By.XPATH, '//*[@id="wrap"]/div/div/div[4]/div[1]/a[1]')
    search.click()
    print("화소선택 버튼 누리기 성공", num)

    # image 주소 가져오기
    img_url = driver.find_element(By.XPATH, '//*[@id="myModal1"]/div/div/div[2]/img' ).get_attribute('src')
    print("주소 가져오기 성공", num)

    # image 다운로드
    urllib.request.urlretrieve(img_url, str(num)+'.png')
    print("다운로드 성공", num)
    time.sleep(5) #다운받는 시간 확보
    num = num + 1
 
    print(num)

 

 

다음에는 24장 모아서 1초짜리 영상으로 자동화 해봐야겠다

24fps 영상 자동화

 

+ Recent posts