출처: https://itseong.tistory.com/entry/21-PYTHON-Instagram-Crawling-with-Selenium%EC%85%80%EB%A0%88%EB%8B%88%EC%9B%80%EC%9C%BC%EB%A1%9C-%EC%9D%B8%EC%8A%A4%ED%83%80-%ED%81%AC%EB%A1%A4%EB%A7%81%ED%95%98%EA%B8%B0-Colab
출처: https://0ver-grow.tistory.com/997

https://chromedriver.chromium.org/downloads
from selenium import webdriver as wd
from bs4 import BeautifulSoup
import time
import requests
import shutil
from selenium.webdriver.common.keys import Keys # 참고!
from selenium.webdriver.common.by import By
driver = wd.Chrome(executable_path='<path>/chromedriver')
url = f'https://www.instagram.com/'
driver.get(url)
html = driver.page_source #현재 페이지 소스
id = 'id'; # 로그인 아이디
pw = 'pw'; # 로그인 비밀번호
username = driver.find_element(by=By.NAME, value='username'); # 로그인할 아이디 input위치
username.send_keys(id); # input에 로그인 아이디를 입력
password = driver.find_element(by=By.NAME, value='password'); # 비밀번호 input 위치
password.send_keys(pw); # input에 비밀번호 입력
send_btn = driver.find_element(by=By.XPATH,value='//*[@id="loginForm"]/div/div[3]/button');
# 로그인 하기 버튼 위치
send_btn.click() # 버튼 클릭
html2 = driver.page_source # 페이지 소스 확인
(매번 새로운 백업 코드를 넣어줘야 하는 것 같아 약간 번거로움)
driver.find_element(by=By.XPATH, value='//form[@class="_3GlM_"]/div[4]/button').click()
# 백업코드로 로그인하기 위해 버튼을 클릭
driver.find_element(by=By.XPATH,value='//*[@name="verificationCode"]').send_keys('<00000000>');
# 백업코드 입력
driver.find_element(by=By.XPATH,value='//form[@class="_3GlM_"]/div[2]/button').click();
# 버튼을 클릭한다.
search = "<keyword>"
keyword = driver.find_element(by=By.CLASS_NAME, value='_aauy');
keyword.send_keys(search);
driver.find_element(by=By.CLASS_NAME, value='_abn_').click()
html = driver.page_source
soup = BeautifulSoup(html)
n = 1 # 이미지 순번
insta = soup.select('._aabd._aa8k._aanf')
for i in insta:
print('https://www.instagram.com'+i.a['href']) # a태그의 속성 href만 가져오기
imgUrl = i.select_one('._aagv').img['src'] # 이미지가 속한 태그 > src만 가져오기
# 이미지 저장하기
with urlopen(imgUrl) as f:
# 저장위치: img 폴더
# 파일명: 검색어 + 순서, 확장자: jpg, 이미지 파일 쓰기: wb
with open('<path>/img/' + search + str(n) + '.jpg', 'wb') as h:
img = f.read()
h.write(img)
n += 1