Instagram에서 작업을 자동화하면 온라인 활동을 관리하는 방식을 크게 간소화할 수 있습니다. instagrapi
는 바로 이러한 작업을 수행하는 데 도움이 되도록 설계된 Python 라이브러리입니다. 이 라이브러리는 공식 모바일 앱이 사용하는 것과 동일한 Instagram 자체 백엔드 시스템과 직접 상호 작용합니다. 이러한 직접적인 통신 덕분에 instagrapi
는 빠르고 효율적이며, 작동에 웹 브라우저가 필요하지 않습니다.
이 가이드는 instagrapi
를 시작하는 명확한 방법을 제공하는 것을 목표로 합니다. 설치 방법, Instagram 계정에 안전하게 로그인하는 방법, 게시물 및 사용자와 상호 작용하는 것과 같은 일반적인 작업 수행 방법, 콘텐츠 업로드 방법, 그리고 자동화가 안전하고 효과적인지 확인하기 위한 필수적인 실천 방법에 대해 다룰 것입니다.
최대한의 생산성으로 개발팀이 함께 작업할 수 있는 통합 올인원 플랫폼을 원하십니까?
Apidog는 귀하의 모든 요구를 충족하며, 훨씬 저렴한 가격으로 Postman을 대체합니다!
시스템에 Instagrapi 설치하기
instagrapi
를 사용하기 전에 설치해야 합니다. 먼저 컴퓨터에 Python이 설치되어 있는지 확인하십시오. instagrapi
는 Python 3.9 버전 이상에서 가장 잘 작동합니다. 터미널(Windows의 명령 프롬프트, PowerShell 또는 macOS/Linux의 터미널)을 열고 python --version
또는 python3 --version
을 입력하여 Python 버전을 확인할 수 있습니다.
Python이 준비되면 Python의 패키지 설치 프로그램인 pip
를 사용하여 instagrapi
를 쉽게 설치할 수 있습니다. 터미널에서 다음 명령을 실행하십시오.
pip install instagrapi
Python 3 설치를 위해 python3
를 특별히 사용하는 경우 다음 명령이 필요할 수 있습니다.
python3 -m pip install instagrapi
이 명령은 instagrapi
와 해당 종속 라이브러리를 다운로드하여 설치합니다. 더 깔끔한 프로젝트 관리를 위해 프로젝트 종속성을 격리하는 Python 가상 환경을 사용하는 것이 좋습니다. python3 -m venv your_project_name
으로 가상 환경을 생성하고 활성화한 다음, 그 안에서 pip install instagrapi
명령을 실행할 수 있습니다.
Instagram 계정에 연결하기
Instagram에서 작업을 수행하려면 스크립트가 로그인해야 합니다. instagrapi
는 이 프로세스를 처리합니다. Python 스크립트의 첫 번째 단계는 Client
클래스를 임포트하고 해당 인스턴스를 생성하는 것입니다. 이 Client
객체가 모든 상호 작용의 주요 도구가 될 것입니다.
from instagrapi import Client
import os
import time
import random
cl = Client()
이제 로그인해 보겠습니다. 사용자 이름과 비밀번호를 스크립트에 직접 하드코딩하지 않는 것이 좋습니다. 환경 변수를 사용하는 것이 더 안전한 방법입니다.
INSTAGRAM_USERNAME = os.getenv("INSTA_USERNAME", "your_insta_username")
INSTAGRAM_PASSWORD = os.getenv("INSTA_PASSWORD", "your_insta_password")
try:
cl.login(INSTAGRAM_USERNAME, INSTAGRAM_PASSWORD)
print(f"@{INSTAGRAM_USERNAME}으로 로그인 성공!")
except Exception as e:
print(f"@{INSTAGRAM_USERNAME} 로그인 실패. 오류: {e}")
계정에 2단계 인증(2FA)이 활성화되어 있다면(보안에 매우 좋습니다), login
메서드는 추가 verification_code
매개변수를 요구합니다. 일반적으로 인증 앱 또는 SMS에서 이 코드를 받아 로그인 호출 시 전달해야 합니다: cl.login(INSTAGRAM_USERNAME, INSTAGRAM_PASSWORD, verification_code="YOUR_2FA_CODE")
.
사용자 이름과 비밀번호로 계속 로그인하는 것은 비효율적이며 Instagram으로부터 원치 않는 관심을 끌 수 있습니다. 더 나은 접근 방식은 첫 번째 성공적인 인증 후에 로그인 세션을 저장하고, 이후 스크립트 실행 시 이 세션을 다시 로드하는 것입니다.
세션을 관리하는 방법은 다음과 같습니다.
from instagrapi.exceptions import LoginRequired
SESSION_FILE_PATH = "my_active_session.json"
if os.path.exists(SESSION_FILE_PATH):
cl.load_settings(SESSION_FILE_PATH)
print(f"{SESSION_FILE_PATH}에서 세션 로드.")
try:
cl.login(INSTAGRAM_USERNAME, INSTAGRAM_PASSWORD)
cl.get_timeline_feed()
print("세션이 유효하며 저장된 세션을 사용하여 로그인 성공.")
except LoginRequired:
print("저장된 세션이 유효하지 않습니다. 새로 로그인해야 합니다.")
try:
cl.login(INSTAGRAM_USERNAME, INSTAGRAM_PASSWORD)
cl.dump_settings(SESSION_FILE_PATH)
print("새 로그인 성공, 새 세션 저장.")
except Exception as e_relogin:
print(f"유효하지 않은 세션 후 새 로그인 실패: {e_relogin}")
except Exception as e_session_use:
print(f"저장된 세션 사용 중 오류 발생: {e_session_use}. 새 로그인 시도.")
try:
cl.login(INSTAGRAM_USERNAME, INSTAGRAM_PASSWORD)
cl.dump_settings(SESSION_FILE_PATH)
print("세션 오류 후 새 로그인 성공, 새 세션 저장.")
except Exception as e_fresh_fallback:
print(f"새 로그인 대체 시도도 실패: {e_fresh_fallback}")
else:
print("세션 파일이 없습니다. 새 로그인 수행...")
try:
cl.login(INSTAGRAM_USERNAME, INSTAGRAM_PASSWORD)
cl.dump_settings(SESSION_FILE_PATH)
print(f"새 로그인 성공, 세션을 {SESSION_FILE_PATH}에 저장.")
except Exception as e_initial_login:
print(f"초기 새 로그인 실패: {e_initial_login}")
if cl.user_id:
print(f"인증 성공. 사용자 ID: {cl.user_id}")
else:
print("인증 실패. 자격 증명과 이전 오류 메시지를 확인하세요.")
이 결합된 접근 방식은 먼저 저장된 세션을 사용하려고 시도하고, 필요한 경우 새 로그인으로 대체하며, 다음 사용을 위해 새 세션을 저장합니다.
Instagrapi를 사용한 핵심 Instagram 상호 작용
로그인에 성공하면 Instagram과 상호 작용을 시작할 수 있습니다. 아래 예제에서는 cl
이 성공적으로 로그인된 Client
객체라고 가정합니다.
사용자 정보 가져오기
사용자 이름을 알고 있다면 모든 Instagram 사용자의 공개 정보를 가져올 수 있습니다. 여기에는 고유한 사용자 ID(PK), 전체 이름, 자기소개, 팔로워 수 등이 포함됩니다.
target_user = "instagram"
try:
user_id_num = cl.user_id_from_username(target_user)
print(f"@{target_user}의 고유 사용자 ID는 {user_id_num}입니다.")
user_details = cl.user_info_by_username(target_user)
print(f"\n@{user_details.username}의 상세 정보:")
print(f" 팔로워: {user_details.follower_count}")
print(f" 자기소개: {user_details.biography[:50]}...")
except Exception as e:
print(f"@{target_user}의 정보를 가져올 수 없습니다. 오류: {e}")
게시물(미디어)과 상호 작용하기
Instagram 게시물은 instagrapi
에서 "미디어"라고 불립니다. 게시물과 상호 작용하려면 일반적으로 해당 게시물의 media_pk
(게시물의 고유 숫자 ID)가 필요합니다. 이 media_pk
는 게시물의 URL에서 얻을 수 있습니다. 다음 예제는 게시물 상세 정보를 가져오는 방법을 보여줍니다. 좋아요나 댓글과 같은 상호 작용은 자동화에 매우 민감하므로 이러한 기능은 아껴서 사용하고 항상 윤리적으로 사용하십시오.
example_post_url = "https://www.instagram.com/p/C_q9Jg1NAn1/"
try:
media_pk_val = cl.media_pk_from_url(example_post_url)
print(f"게시물의 media_pk는: {media_pk_val}")
media_details = cl.media_info(media_pk_val)
print(f"\n@{media_details.user.username}의 게시물에는 좋아요가 {media_details.like_count}개 있습니다.")
print(f"캡션 일부: {media_details.caption_text[:60]}...")
string_media_id_for_action = cl.media_id(media_pk_val)
print(f"액션(좋아요/댓글 등)을 위한 문자열 media_id: {string_media_id_for_action}")
except Exception as e:
print(f"게시물 {example_post_url} 상호 작용 중 오류 발생. 오류: {e}")
게시물에 좋아요를 누르려면 cl.media_like(string_media_id_for_action)
을 사용합니다. 댓글을 달려면 cl.media_comment(string_media_id_for_action, text="Your comment")
를 사용합니다. 이러한 작업 후에는 항상 지연(time.sleep()
)을 포함하십시오.
콘텐츠 업로드instagrapi
를 사용하면 사진, 비디오, 앨범 및 스토리를 업로드할 수 있습니다.
사진 업로드:
JPG 이미지 파일의 경로가 필요합니다. 아래 예제는 구조를 보여주며, 유효한 이미지 경로를 제공해야 합니다.
from pathlib import Path
image_path_to_upload = Path("your_image.jpg")
photo_caption = "Instagrapi로 처음 업로드한 사진! #Python #Automation"
if image_path_to_upload.exists() and image_path_to_upload.suffix.lower() == ".jpg":
try:
uploaded_photo = cl.photo_upload(image_path_to_upload, photo_caption)
print(f"사진 업로드 완료! 여기서 확인하세요: https://www.instagram.com/p/{uploaded_photo.code}/")
except Exception as e:
print(f"{image_path_to_upload} 사진 업로드 실패. 오류: {e}")
else:
print(f"'your_image.jpg'를 유효한 JPG 파일 경로로 바꾸세요.")
스토리 업로드:
스토리는 종종 9:16 종횡비를 사용합니다. 사진 또는 비디오를 업로드할 수 있습니다. 사진 스토리를 업로드하는 코드는 일반 사진 게시물과 유사하지만 photo_upload_to_story
를 사용합니다.
from instagrapi.types import StoryMention, StoryLink
story_image_path = Path("your_story_image.jpg")
if story_image_path.exists() and story_image_path.suffix.lower() == ".jpg":
try:
uploaded_story = cl.photo_upload_to_story(
story_image_path,
caption="내 Instagrapi 스토리!"
)
print(f"스토리 업로드 성공! PK: {uploaded_story.pk}")
except Exception as e:
print(f"{story_image_path} 스토리 업로드 실패. 오류: {e}")
else:
print(f"'your_story_image.jpg'를 스토리에 적합한 9:16 JPG 파일 경로로 바꾸세요.")
StoryMention
또는 StoryLink
객체를 준비하고 photo_upload_to_story
에 매개변수로 전달하여 mentions
및 links
와 같은 대화형 요소를 추가할 수 있습니다.
원활한 자동화를 위한 주요 고려 사항
Instagram 작업을 자동화할 때 안정성을 높이고 계정 문제를 방지하기 위해 몇 가지 실천 방법이 중요합니다.
지연 도입: 인간 사용자는 작업을 즉시 연속해서 수행하지 않습니다. 스크립트도 마찬가지입니다. 작업 사이에 time.sleep(random.uniform(min_seconds, max_seconds))
를 사용하여 자연스러운 상호 작용 패턴을 모방하십시오. instagrapi
자체에는 특정 작업에 자동 지연을 추가하는 cl.delay_range = [min, max]
설정이 있습니다.
집중적인 사용을 위한 프록시 고려: 스크립트가 많은 수의 요청을 하거나 동일한 IP 주소에서 여러 계정을 관리하는 경우 Instagram이 활동을 제한할 수 있습니다. 프록시 서버(cl.set_proxy("your_proxy_string")
)를 사용하면 요청을 분산시키고 다른 위치에서 오는 것처럼 보이게 할 수 있습니다.
잠재적 오류 처리: 네트워크 문제가 발생하거나 Instagram의 API가 변경되거나 속도 제한에 걸릴 수 있습니다. instagrapi
호출을 try...except
블록으로 감싸서 이러한 오류를 우아하게 처리하십시오. instagrapi
에는 RateLimitError
, UserNotFound
, MediaNotFound
등과 같은 특정 예외가 있으며, 이를 통해 더 구체적인 오류 처리를 할 수 있습니다.
책임감 있고 윤리적으로 사용: 자동화는 강력합니다. 스팸을 보내거나 사용자 개인 정보를 침해하거나 Instagram의 서비스 약관 또는 커뮤니티 가이드라인을 위반하는 활동에 참여하지 마십시오. 자동화의 목표는 진정한 상호 작용을 강화하거나 효율적으로 활동을 관리하는 것이어야 하며, 조작하거나 방해하는 것이 아니어야 합니다.
간단한 자동화 예제: 해시태그의 최신 게시물에 좋아요 누르기
특정 해시태그의 최신 게시물을 찾아 몇 개에 좋아요를 누르는 작은 스크립트를 만들어 보겠습니다. 이는 여러 instagrapi
기능을 결합하는 방법을 보여줍니다. 이 예제는 매우 주의해서 사용하고 책임감 있는 사용에 맞는 해시태그와 수량에만 사용하십시오. 이 코드는 예시이며 공격적인 사용은 계정에 해를 끼칠 수 있습니다.
target_hashtag_for_liking = "pythonprogramming"
number_of_posts_to_like = 1
try:
print(f"#{target_hashtag_for_liking}의 최신 미디어 가져오는 중...")
recent_hashtag_media = cl.hashtag_medias_recent(target_hashtag_for_liking, amount=number_of_posts_to_like * 2)
liked_count = 0
if recent_hashtag_media:
for media_item in recent_hashtag_media:
if liked_count >= number_of_posts_to_like:
break
if not media_item.has_liked:
print(f" @{media_item.user.username}의 게시물 PK {media_item.pk}에 좋아요 시도 중...")
try:
media_id_str_to_like = cl.media_id(media_item.pk)
cl.media_like(media_id_str_to_like)
liked_count += 1
print(f" 좋아요 성공. 현재까지 좋아요 누른 게시물: {liked_count}/{number_of_posts_to_like}")
time.sleep(random.uniform(15, 25))
except Exception as e_like:
print(f" 게시물 PK {media_item.pk}에 좋아요 누를 수 없음. 오류: {e_like}")
else:
print(f" @{media_item.user.username}의 이미 좋아요 누른 게시물 PK {media_item.pk} 건너뛰기.")
print(f"\n#{target_hashtag_for_liking}에 대한 좋아요 스크립트 완료. 이번 실행에서 총 좋아요 수: {liked_count}")
else:
print(f"#{target_hashtag_for_liking}에 대한 최신 미디어를 찾을 수 없습니다.")
except Exception as e_hashtag_script:
print(f"해시태그 좋아요 스크립트에서 오류 발생: {e_hashtag_script}")
이 예제는 시연용입니다. 좋아요 자동화, 특히 대량으로 수행하는 것은 Instagram에 의해 쉽게 플래그될 수 있습니다. 대규모 자동화 작업보다 진정한 참여를 항상 우선시하십시오.
Instagrapi로 나아가기
instagrapi
는 Instagram과 상호 작용하기 위한 다양한 도구를 제공합니다. 이 가이드는 설정, 로그인 및 가장 일반적인 작업 수행 방법을 보여주며 표면만 다루었습니다.
instagrapi
를 진정으로 숙달하려면 공식 문서를 살펴보십시오. Instagrapi GitHub 저장소의 README.md
파일이 가장 좋은 시작점이며, 일반적으로 docs
폴더 내의 더 자세한 가이드 및 API 참조로 연결됩니다. 이러한 리소스는 더 많은 기능, 고급 설정 및 다양한 Instagram 객체에 대한 특정 유형을 다룹니다.
Instagram 플랫폼과 API는 변경될 수 있으므로 오늘 작동하는 것이 내일은 조정이 필요할 수 있다는 점을 기억하십시오. instagrapi
라이브러리 및 커뮤니티 토론을 최신 상태로 유지하면 적응하는 데 도움이 될 수 있습니다. 즐거운 자동화 되시고, 책임감 있게 사용하십시오!
최대한의 생산성으로 개발팀이 함께 작업할 수 있는 통합 올인원 플랫폼을 원하십니까?
Apidog는 귀하의 모든 요구를 충족하며, 훨씬 저렴한 가격으로 Postman을 대체합니다!