Insta Crawling

부서진·2022년 9월 27일

Crawling

목록 보기
1/3

출처: 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

chrome driver 설치

https://chromedriver.chromium.org/downloads

mac chrome driver 허용

  1. cmd 창에서 chromedriver 위치로 이동
  2. xattr -d com.apple.quarantine chromedriver
  3. chromedriver 열고 아래 코드 실행

library import

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 지정

driver = wd.Chrome(executable_path='<path>/chromedriver')

insta url로 이동

url = f'https://www.instagram.com/'
driver.get(url)

id/pw 입력

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

0개의 댓글