가장 쉬운 방법. 라이브러리 활용하기 (비로그인 방문 OK)
instaloader라는 라이브러리를 활용해서 진행할 수 있습니다.
pip install instaloader
코드 설명 _확인 (23.7.04)
import instaloader
#인스타로더 사용 시작.
bot = instaloader.Instaloader()
#사용자 이름 정의 직접 기입해도 상관없습니다.
Username = input('Enter the Account Username: ')
#프로필을 정의합니다.
profile = instaloader.Profile.from_username(bot.context, Username)
print("Username: ", profile.username)
print("User ID: ", profile.userid)
print("Number of Posts: ", profile.mediacount)
print("Followers: ", profile.followers)
print("Followees: ", profile.followees)
print("Bio: ", profile.biography, profile.external_url)
출력 기대값
![인스타그램 크롤링 2022 개정판 코드 수록. - undefined - undefined - 가장 쉬운 방법. 라이브러리 활용하기 (비로그인 방문 OK) 인스타그램 크롤링 2022 개정판 코드 수록. - undefined - undefined - 가장 쉬운 방법. 라이브러리 활용하기 (비로그인 방문 OK)](https://i2.wp.com/blog.kakaocdn.net/dn/cqe7Jj/btrH0uMDQ64/kGEoKfojVK4LCnPI4Lr2C0/img.png)
셀레늄 활용하기 (로그인) _ 코드 확인(23.7.04)
저는 일단 파이어폭스 브라우저를 활용했습니다. 구글 크롬 브라우저 버전을 일일이 확인하면서 진행하기가 귀찮기 때문에….
import random
import pandas as pd
from selenium import webdriver
import time
#인스타그램 계정 제어 공간입니다 아래 3곳 필드를 수정해서 사용해주세요.
id = '로그인 아이디'
password = '로그인 비밀번호'
name_list=['officialfromis_9','jiheonnibaek','k_a_z_u_h_a__']
print('browser loading..')
browser = webdriver.Firefox(executable_path='/Users/irix/PycharmProjects/a/geckodriver')
browser.delete_all_cookies()
time.sleep(5)
#인스타그램 로그인 필드
browser.get('https://www.instagram.com')
time.sleep(3.5)
username_input = browser.find_elements_by_css_selector('input._2hvTZ')[0]
username_input.send_keys(id)
time.sleep(2 + random.random() * 0.3)
password_input = browser.find_elements_by_css_selector('input._2hvTZ')[1]
password_input.send_keys(password)
time.sleep(1)
password_input.submit()
time.sleep(2)
print("login success")
#브라우저 로드까지 대기.
browser.implicitly_wait(4)
time.sleep(10)
#인스타그램 네임리스트를 통해 게시물 수, 팔로워 수, 팔로우 수를 추적합니다.
for namer in name_list:
browser.get('https://www.instagram.com/'+namer+'/?hl=ko')
time.sleep(1)
#게시물 수
mediacount = browser.find_element_by_xpath('/html/body/div[1]/div/div/div/div[1]/div/div/div/div[1]/div[1]/section/main/div/header/section/ul/li[1]').text
#팔로워 수
followers = browser.find_element_by_xpath('/html/body/div[1]/div/div/div/div[1]/div/div/div/div[1]/div[1]/section/main/div/header/section/ul/li[2]/a/div/span').text
#팔로우 수
followees = browser.find_element_by_xpath('/html/body/div[1]/div/div/div/div[1]/div/div/div/div[1]/div[1]/section/main/div/header/section/ul/li[3]/a/div/span').text
print(mediacount)
print(followers)
print(followees)
![인스타그램 크롤링 2022 개정판 코드 수록. - undefined - undefined - 셀레늄 활용하기 (로그인) _ 코드 확인(22.7.24) 인스타그램 크롤링 2022 개정판 코드 수록. - undefined - undefined - 셀레늄 활용하기 (로그인) _ 코드 확인(22.7.24)](https://i2.wp.com/blog.kakaocdn.net/dn/cJf7w5/btrH9Hi4Ifb/kFOPNfBckX02UkelqjjfM1/img.gif)
수집 원리?
Full Xpath를 가져와서 표기하였습니다. 좀 더 복잡한 방법을 쓴다면, 인스타그램의 graphql에 접근해서 shorcod라는 친구를 만져야 하지만 간단한 크롤링을 하고 싶다면 기피되는 게 사실이죠~
아마 2020년~21년 초까지는 script 내의 shared data에서 쉽게 추려왔던 거 같은데 현재는 기존 방식으로는 크롤링이 되지 않습니다 🙂
만약 저 코드에서 사용자의 아이디도 가져오고 싶다면 어떻게 해야 할까요?
브라우저의 CSS 인스펙터 도구를 활용해서 Full Xpath를 가져오면 됩니다.
![인스타그램 크롤링 2022 개정판 코드 수록. - undefined - undefined - 셀레늄 활용하기 (로그인) _ 코드 확인(22.7.24) 인스타그램 크롤링 2022 개정판 코드 수록. - undefined - undefined - 셀레늄 활용하기 (로그인) _ 코드 확인(22.7.24)](https://i3.wp.com/blog.kakaocdn.net/dn/GlAe1/btrH6Hw6QGO/2M4TbR0ZKjWyFbkiuKzXC1/img.png)
브라우저의 검사 기능을 활용해서 찾고자 하는 요소의 위치를 찾아내 준 뒤
![인스타그램 크롤링 2022 개정판 코드 수록. - undefined - undefined - 셀레늄 활용하기 (로그인) _ 코드 확인(22.7.24) 인스타그램 크롤링 2022 개정판 코드 수록. - undefined - undefined - 셀레늄 활용하기 (로그인) _ 코드 확인(22.7.24)](https://i0.wp.com/blog.kakaocdn.net/dn/dyQbIt/btrH9ICiyKp/rgjpL8mmWzdiIA1g17dVW0/img.png)
다음과 같이 Full Xpath를 받아옵니다.
아이디의 경우에는
/html/body/div[1]/div/div/div/div[1]/div/div/div/div[1]/div[1]/section/main/div/header/section/div[1]/h2
를 활용하면 되겠습니다.
사실 제대로 활용하기 위해서는 판다스 등을 활용해서 csv로 저장해주거나 저장 값을 스프레드시트 등 활용 가능한 툴에 넣어놓고 쓰는 게 가장 좋습니다.
코드블럭 예시 1.
from selenium import webdriver
import time
# 크롬 웹 드라이버 경로 설정
driver_path = '경로_입력'
# 인스타그램 프로필 URL
profile_url = '프로필_URL'
# 크롬 웹 드라이버 실행
driver = webdriver.Chrome(driver_path)
driver.get(profile_url)
# 로그인 확인
login_button = driver.find_element_by_xpath("//button[contains(text(), '로그인')]")
if login_button:
login_button.click()
time.sleep(2)
username_input = driver.find_element_by_xpath("//input[@name='username']")
username_input.send_keys('사용자명')
password_input = driver.find_element_by_xpath("//input[@name='password']")
password_input.send_keys('비밀번호')
login_button = driver.find_element_by_xpath("//button[@type='submit']")
login_button.click()
time.sleep(5)
# 게시물 개수 확인
post_count = driver.find_element_by_xpath("//span[@class='g47SY ']").text
print("게시물 개수:", post_count)
# 게시물 크롤링
posts = driver.find_elements_by_xpath("//a[@class='v1Nh3 kIKUG _bz0w']")[:10] # 상위 10개의 게시물만 크롤링
for post in posts:
post.click()
time.sleep(2)
# 게시물 내용 크롤링
content = driver.find_element_by_xpath("//div[@class='C4VMK']/span").text
print("게시물 내용:", content)
# 댓글 크롤링
comments = driver.find_elements_by_xpath("//div[@class='C4VMK']//span")
for comment in comments:
print("댓글:", comment.text)
close_button = driver.find_element_by_xpath("//button[@class='ckWGn']")
close_button.click()
time.sleep(2)
# 크롬 웹 드라이버 종료
driver.quit()
인스타그램 특정 게시물 접근 + 이미지 다운로드 받기
마찬가지로 셀레니움으로 스타트하고 로그인 후 접근합니다. 로그인하지 않는 경우 쿠키값을 사용하셔야 합니다.
from selenium import webdriver
import time
# 크롬 웹 드라이버 경로 설정
driver_path = '경로_입력'
# 인스타그램 프로필 URL
profile_url = '프로필_URL'
# 크롬 웹 드라이버 실행
driver = webdriver.Chrome(driver_path)
driver.get(profile_url)
# 로그인 확인
login_button = driver.find_element_by_xpath("//button[contains(text(), '로그인')]")
if login_button:
login_button.click()
time.sleep(2)
username_input = driver.find_element_by_xpath("//input[@name='username']")
username_input.send_keys('사용자명')
password_input = driver.find_element_by_xpath("//input[@name='password']")
password_input.send_keys('비밀번호')
login_button = driver.find_element_by_xpath("//button[@type='submit']")
login_button.click()
time.sleep(5)
# 게시물 개수 확인
post_count = driver.find_element_by_xpath("//span[@class='g47SY ']").text
print("게시물 개수:", post_count)
# 게시물 크롤링
posts = driver.find_elements_by_xpath("//a[@class='v1Nh3 kIKUG _bz0w']")[:10] # 상위 10개의 게시물만 크롤링
for post in posts:
post.click()
time.sleep(2)
# 게시물 내용 크롤링
content = driver.find_element_by_xpath("//div[@class='C4VMK']/span").text
print("게시물 내용:", content)
# 댓글 크롤링
comments = driver.find_elements_by_xpath("//div[@class='C4VMK']//span")
for comment in comments:
print("댓글:", comment.text)
close_button = driver.find_element_by_xpath("//button[@class='ckWGn']")
close_button.click()
time.sleep(2)
# 크롬 웹 드라이버 종료
driver.quit()
인스타그램 데이터 가져오기 셀레니움.
인스타그램 데이터를 가져오고 csv 파일로 최종 저장하는 코드입니다.
import csv
from selenium import webdriver
import time
# 크롬 웹 드라이버 경로 설정
driver_path = '경로_입력'
# 인스타그램 프로필 URL
profile_url = '프로필_URL'
# 크롬 웹 드라이버 실행
driver = webdriver.Chrome(driver_path)
driver.get(profile_url)
time.sleep(2)
# 로그인 확인
login_button = driver.find_element_by_xpath("//button[contains(text(), '로그인')]")
if login_button:
login_button.click()
time.sleep(2)
username_input = driver.find_element_by_xpath("//input[@name='username']")
username_input.send_keys('사용자명')
password_input = driver.find_element_by_xpath("//input[@name='password']")
password_input.send_keys('비밀번호')
login_button = driver.find_element_by_xpath("//button[@type='submit']")
login_button.click()
time.sleep(5)
# 팔로워, 팔로잉, 미디어 수 가져오기
follower_count_element = driver.find_element_by_xpath("//a[contains(@href, 'followers')]/span")
follower_count = follower_count_element.get_attribute('title')
following_count_element = driver.find_element_by_xpath("//a[contains(@href, 'following')]/span")
following_count = following_count_element.get_attribute('title')
media_count_element = driver.find_element_by_xpath("//span[@class='g47SY ']")
media_count = media_count_element.text
# CSV 파일로 저장
data = [['팔로워', '팔로잉', '미디어 수'],
[follower_count, following_count, media_count]]
filename = '인스타그램_프로필.csv'
with open(filename, 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerows(data)
# 크롬 웹 드라이버 종료
driver.quit()