-
Selenium 기초 및 활용 하기 7 - 인스타 그램 이미지 크롤링빅데이터/Selenium 2022. 1. 14. 21:35
유투버 '프로그래머 김플 스튜디오' 강의 참조
- 인스타 아이디가 있으면 비교적 쉽게 되겠지만 2021년 7월 기준 약 100~300개가 넘어가는 게시물들은 블락이 걸린다. 즉 로그인이 필요 하다!
이렇게 이용이 가능 하다! * 기본 세팅
from urllib.request import urlopen from urllib.parse import quote_plus #아스키 코드 변환 용 from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.common.by import By import time
01 URL 세팅
- 아래 URL을 가지고 세팅
baseUrl = 'https://www.instagram.com/explore/tags/' plusUrl = input('검색할 태그를 입력하세요: ') url = baseUrl + quote_plus(plusUrl) print(url)
- 이렇게 기본 URL 과 뒤에 오는 URL을 따로 만들어 놓으면 무엇이든지 검색을 해서 크롤링을 할 수 있다
02 페이스북 로그인
- 웹페이지를 띄우고 이 버튼을 클릭을 먼저 해야 한다.
login_option="facebook" facebook_login_page_css=".sqdOP.L3NKy.y3zKF " facebook_login_page_css2=".sqdOP.yWX7d.y3zKF " facebook_id_form_name="email" facebook_pw_form_name="pass" facebook_login_btn_name="login" driver = webdriver.Chrome() driver.get(url) time.sleep(3) if login_option == "facebook": is_facebook_btn_click = False try: print("페이스북 로그인 버튼 클릭!") facebook_login_btn = driver.find_element(By.CSS_SELECTOR(facebook_login_page_css)) time.sleep(5) facebook_login_btn.click() is_facebook_btn_click = True is_login_success = True except Excpetion as e: print(e, "페이스북 로그인 버튼 클릭 실패!") is_facebook_btn_click = False is_login_success = False time.sleep(10)
- 혹시나 버튼 하나로 안될수도 있다고 한다. 신기하게도 facebook_login_page_css/facebook_login_page_css2 둘다 검색을 해보면 똑같은 버튼인데 두개의 다른 css를 가지고 있다.
▶ 로그인 페이지로 성공적으로 넘어가면 아래와 같은 화면이 뜬다. 여기서 이제 입력을 시켜주면 된다.
login_option="facebook" facebook_login_page_css=".sqdOP.L3NKy.y3zKF " facebook_login_page_css2=".sqdOP.yWX7d.y3zKF " facebook_id_form_name="id" facebook_pw_form_name="pw*" facebook_login_btn_name="login" url = 'https://www.instagram.com/accounts/login/' driver = webdriver.Chrome() driver.get(url) time.sleep(3) if login_option == "facebook": is_facebook_btn_click = False try: print("페이스북 로그인 버튼 클릭!") facebook_login_btn = driver.find_element(By.CSS_SELECTOR, facebook_login_page_css) time.sleep(3) facebook_login_btn.click() is_facebook_btn_click = True is_login_success = True except: print("페이스북 로그인 버튼 클릭 실패!") is_facebook_btn_click = False is_login_success = False time.sleep(3) if not is_facebook_btn_click: print("페이스북 로그인 버튼2 클릭!") try: facebook_login_btn = driver.find_element(By.CSS_SELECTOR, facebook_login_page_css2) time.sleep(3) facebook_login_btn.click() is_facebook_btn_click = True is_login_success = True except e: print("페이스북 로그인 버튼2 클릭 실패!") is_login_success = False time.sleep(3) print("로그인 시작") id_input_form = driver.find_element(By.ID, 'email') pw_input_form = driver.find_element(By.ID, 'pass') id_input_form.send_keys(facebook_id_form_name) pw_input_form.send_keys(facebook_pw_form_name) time.sleep(3) try: login_btn = driver.find_element(By.ID, 'loginbutton') login_btn.click() print("로그인 성공!") time.sleep(3) except Exception as e: print(e) print("[로그인 페이지] 로그인 버튼 클릭 실패!")
그러면 이렇게 성공적으로 로그인이 된다. ▶ 위의 코드는 자기가 편한대로 짜기만 하면 된다. 이렇게 로그인이되면 이제 검색을 시켜보면 검색이 되는것을 볼 수 있다.
02 사진 접근
baseUrl = 'https://www.instagram.com/explore/tags/' plusUrl = input('검색할 태그를 입력하세요: ') url = baseUrl + quote_plus(plusUrl) driver.get(url) time.sleep(3) html = driver.page_source #웹 페이지의 html소스를 들고 온다. soup = BeautifulSoup(html) insta = soup.select('.v1Nh3.kIKUG._bz0w') print(insta)
굿! 03 사진 URL 접근
- 현재 한 사진에 대해서 접근 가능한 URL이 2개로 나뉘어 진다. <a> 태그는 원 사진이 올라와있는 인스타그램에 접근이 가능하고 <img> 태그는 말 그대로 사진에 바로 접근이 가능 하다.
insta = soup.select('.v1Nh3.kIKUG._bz0w') for i in insta: print('https://www.instagram.com'+ i.a['href'])
굿 ▶ 이제 다운로드를 해보자
insta = soup.select('.v1Nh3.kIKUG._bz0w') print("태그 검색 완료!") n = 1 for i in insta: print('https://www.instagram.com'+ i.a['href']) imgUrl = i.select.one('.KL4Bh').img['src'] with urlopen(imgUrl) as f: with open('./img/' + plusUrl + str(n)+ '.jpg', 'wb') as h: #텍스트 파일이 아니니 'wb'로 처리 img = f.read() # urlopen()을 한걸 읽고 h.write(img) # open()으로 설정한 값대로 저장 n+=1 print(imgUrl) print()
▶ 추가적으로 계속해서 사진을 크롤링 하고싶다면 셀레니엄의 스크롤다운 기능이나 반복문 회수를 정해주면 된다.
'빅데이터 > Selenium' 카테고리의 다른 글
Selenium 기초 및 활용 하기 6 - 2 - 국회의원 스크래핑 (0) 2022.01.14 Selenium 기초 및 활용 하기 6 - 국회의원 스크래핑 (0) 2022.01.13 Selenium 기초 및 활용 하기 5-2 - 네이버 뉴스 댓글 스크래핑 (0) 2022.01.12 Selenium 기초 및 활용 하기 5 - 네이버 뉴스 댓글 스크래핑 (0) 2022.01.12 Selenium 기초 및 활용 하기 04-2 - 구글 이미지 스크래핑 (0) 2022.01.12