Python Selenium 인스타그램 게시글 이미지 가져오기

바다구름·2023년 3월 17일

Python

목록 보기
4/4
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import urllib.request # 이미지 저장 라이브러리

driver = webdriver.Chrome('chromedriver.exe')
driver.get('https://instagram.com')                                # 이 사이트를 크롬 드라이버로 열어라.

time.sleep(2) ## 2초 쉬고
id = driver.find_element_by_css_selector('input[name="username"]') # input태그의 이름이 username 인 곳에 포커스.
id.send_keys('chu9400@naver.com')                                   # 포커스 된 곳에 다음 값을 입력해라.

pw = driver.find_element_by_css_selector('input[name="password"]') # input 태그의 이름이 password 인 곳에 포커스해라
pw.send_keys('choifence94!!')                                       # 그 곳에 다음 값을 입력해라.

enter = driver.find_element_by_css_selector('._acap')               #class 이름이 _acap 인 것을 찾아라.
enter.send_keys(Keys.ENTER)                                         # 찾은 클래스에 '엔터' 해줘라
time.sleep(3)

#위의 코드들을 실행하면 인스타그램에 입력한 id와 pw 값으로 로그인 됨.


driver.get('https://www.instagram.com/explore/tags/볼보/')          # 로그인 후 '볼보'라고 검색한 페이지를 보여줘라.
driver.implicitly_wait(5)                                           # 저 요소를 찾을 때 까지 5초 기다려라, 찾으면 바로 다음 코드 실행.
e = driver.find_element_by_css_selector('._aagw')                   # 첫 번쨰 게시글을 찾아라.
driver.execute_script('arguments[0].click();', e)                   # 선택한 요소를 클릭해라. -> 첫 번째 게시글이 띄어짐.


이미지 = driver.find_element_by_css_selector('._aato .xu96u03').get_attribute('src') # 클릭한 게시글의 이미지 src 값을 찾아라.
driver.implicitly_wait(5)                                                            # 찾을 때 까지 대기
urllib.request.urlretrieve(이미지, '1.jpg')                                           # 파이썬 파일 있는 곳에 src로 된 이미지를 1.jpg 이름으로 저장해라.

e = driver.find_elements_by_css_selector('._abl-')[0]                                 # 다음 게시글 보기 버튼 찾아라
driver.execute_script('arguments[0].click();', e)                                      # 다음 게시글 보기 버튼 클릭

for i in range(2, 11):                                                                  # 위에 한번 실행했으니 나머진 9번 반복해라. 
    이미지 = driver.find_element_by_css_selector('._aato .xu96u03').get_attribute('src') # 첫 번째만 반복문 밖에 코드를 짠 것은 인스타그램 html 구조 때문!
    driver.implicitly_wait(5)
    urllib.request.urlretrieve(이미지, f'{i}.jpg')

    e = driver.find_elements_by_css_selector('._abl-')[1]
    driver.execute_script('arguments[0].click();', e)
    

반복문 코드 해석

_abl- 클래스

  • 이 클래스는 다음 보기 버튼을 누르기 위해 필자가 선택한 클래스이다.

1. 인스타그램 페이지에 _abl- 라는 클래스는 여러 개 있다.


이 페이지에서만 12개의 요소가 있음.




2. 첫 게시글 페이지에서 _abl-는 첫번째 요소이다. (리스트[0])

첫 번째 요소인 것을 알 수 있음.




3. 두 번째 게시글 페이지부터 _abl-는 두 번째 요소이다. (리스트[1])


이미지를 보면 2 of 7 으로 두 번째 요소 인 것을 확인.




4. 따라서 첫 번째 게시글 페이지만 반복문 밖에서 실행.

  • 두 번째 게시글 페이지부터는 반복문으로 _abl-의 두 번째 요소를 클릭


결과 확인

자동으로 10개의 이미지 다운 확인!

profile
안녕하세요.

0개의 댓글