[Python] 인스타 크롤링 / 이미지다운

2021. 1. 5. 20:52Hi/Python

 

 

아래는 전체코드입니다.

from urllib.request import urlopen
from urllib.parse import quote_plus
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
#import pyautogui

baseURL = 'https://www.instagram.com/'
plusURL = input('입력 : ')
url = baseURL + quote_plus(baseURL)

#############################################로그인
driver = webdriver.Chrome()
usr = "Test@insta.com"
pwd = "test01!"
driver.get("https://www.instagram.com/accounts/login/")
time.sleep(3)
elem = driver.find_element_by_name("username")
elem.send_keys(usr)
elem = driver.find_element_by_name("password")
elem.send_keys(pwd)
elem.send_keys(Keys.RETURN)

time.sleep(3)

##########################################주소이동
searchURL = 'https://www.instagram.com/explore/tags/'
url = searchURL + quote_plus(plusURL)
driver.get(url)

time.sleep(3)

# 파이오토로 설정눌러주는거 할려했는데 안하고 url주소 바꿈
# a1= pyautogui.locateCenterOnScreen('submit.PNG') 
# pyautogui.moveTo(a1) #화면 캡쳐한 곳 가운데로 이동
# pyautogui.doubleClickclick() #한번 클릭
# time.sleep(1) #1초 대기

html = driver.page_source #페이지 소스 가져옴.
soup = BeautifulSoup(html, "html.parser") #웹페이지 분석.

insta = soup.select('.v1Nh3.kIKUG._bz0w')#클래스명이 v1Nh3인 것을 선택함.
n= 1  #얘는 사진제목정할때 1씩 오르면서 저장할려고 설정함.

for i in insta : #위에 선택한 클래스는 많기 때문에 배열(list) 형태임.
    #print('https://www.instagram.com' + i.a['href']) # a태그의 href 값 
    imgUrl = i.select_one('.KL4Bh').img['src'] #클래스명이 KL4Bh인 곳의 img태그의 src를 가져옴
    with urlopen(imgUrl) as f : #가져온 이미지 링크를 오픈함. 이걸 f라 함.
       # print(imgUrl)
        with open('./skirr/' + plusURL + str(n)+ '.jpg', 'wb') as h : #write binary #폴더는 미리 만들어놔야함.
            img = f.read() #img 라는 변수는 위에 가져온 링크를 읽는 거임.
            h.write(img)  #img 변수를 위에처럼 write함.
    n +=1 #제목1, 제목2 , ... 
        # print(imgUrl)
        # print()
driver.close

sleep은 웹 로딩시간 고려해서 3초로 설정하였다.

 

인스타 검색을 위해 웹사이트를 켜면 로그인 창이뜬다. 이에 자동 로그인 기능을 사용하기 위해

driver.find_element_by_name을 사용해 아이디와 비밀번호를 입력할 곳을 찾고

elem.send_keys를 사용해 로그인을 하였다.

 

로그인을 하면 두가지 문제가 생긴다. 첫번째로 이 위에 사진처럼 선택해야하고, 

이렇게 알림설정을 할건지 설정해야한다.

 

이 두가지를 패스하고 태그 검색을 하기위해 바로

'https://www.instagram.com/explore/tags/'로 이동할 주소를 설정하고 driver.get을 하여 페이지 이동을 하였다.

여기서 사진 하나씩 저장하기위해 이 사진 정보를 담고있는 클래스명을 찾아

soup.select('.v1Nh3.kIKUG._bz0w')를 하였고, 이를 print하여 이미지 주소를 찾았다. 이미지 주소는 KL4Bh 클래스에 있는 img태그의 src이니 이를 open하여 jpg로 저장하였다.

 

저장할 폴더는 돌아가고 있는 파이썬의 디렉토리에 미리 만들어 놔야 찾고 저장이 되었다.

이렇게하면 사진들을 크롤링해 폴더에 저장할 수 있다.

 

728x90

'Hi > Python' 카테고리의 다른 글

[Python] 똥피하기_ 고전게임 제작  (0) 2021.01.09
[python] 카카오톡 테러(매크로) 프로그램 만들기  (3) 2020.12.29
[python] 백과사전  (0) 2020.12.29