Python을 사용하여 Instagram 데이터를 다운로드하는 방법

Statista에 따르면 Instagram은 2021년 현재 약 12억 1천만 명의 사용자, 즉 인터넷의 약 28%를 보유한 세계 최대의 소셜 미디어 네트워크 중 하나입니다.

이 문서는 두 가지 방법으로 Python을 사용하여 프로필에서 프로그래밍 방식으로 Instagram 데이터를 다운로드하는 방법에 대한 가이드입니다. 첫 번째 방법은 Instaloader를 사용하여 미디어를 다운로드하는 것입니다. 두 번째는 프로필에 대한 JSON 데이터를 가져오는 간단한 Python 스크립트를 작성하는 것입니다.

데이터 스크랩은 Instagram의 서비스 약관을 위반할 수 있으므로 계정에서만 데이터를 다운로드하는 것이 좋습니다.

인스타로더 사용

Instaloader는 Instagram 미디어를 다운로드하기 위한 Python 패키지입니다. 매우 사용하기 쉽고 데이터를 빠르고 쉽게 추출하고 다운로드할 수 있습니다. Instaloader를 사용하려면 먼저 pip를 사용하여 설치합니다.

pip install instaloader

일단 설치되면 명령줄 인터페이스에서 사용하거나 Python 스크립트의 패키지로 사용할 수 있습니다.

명령줄에서 사용하려면 instaloader 명령을 사용합니다. 예를 들어 도움말 정보를 표시하려면 터미널에 다음 명령을 입력합니다.

instaloader --help

사용자의 프로필 사진을 다운로드하려면 –profile 태그와 함께 사용자 이름을 입력하여 명령을 입력합니다. 이렇게:

instaloader --profile <USERNAME OF THE PROFILE>

하지만 이 명령이 작동하려면 먼저 로그인해야 합니다. 이렇게 하려면 다음과 같이 로그인 옵션을 전달합니다.

instaloader --login <YOUR USERNAME> --profile <USERNAME OF THE PROFILE>

무엇을 다운로드할 것인가

Instaloader를 사용하면 다양한 미디어를 다운로드할 수 있습니다. 매뉴얼 페이지의 이 발췌문은 다운로드할 수 있는 다양한 항목을 모두 보여줍니다.

  profile               Download profile. If an already-downloaded profile has been renamed, Instaloader automatically finds it by its unique
                        ID and renames the folder likewise.
  @profile              Download all followees of profile. Requires --login. Consider using :feed rather than @yourself.
  "#hashtag"            Download #hashtag.
  %location_id          Download %location_id. Requires --login.
  :feed                 Download pictures from your feed. Requires --login.
  :stories              Download the stories of your followees. Requires --login.
  :saved                Download the posts that you marked as saved. Requires --login.
  -- -shortcode         Download the post with the given shortcode
  filename.json[.xz]    Re-Download the given object.
  +args.txt             Read targets (and options) from given textfile.

특정 사용자의 게시물을 다운로드하려면 다음 명령을 입력합니다.

instaloader --login <YOUR USERNAME> <TARGET USERNAME>

이 경우 사용자 이름은 인증된 Instagram 계정의 사용자 이름입니다. 대상 사용자 이름은 다운로드하려는 게시물의 프로필입니다.

  Instagram 스토리에서 게시물을 공유하는 방법

프로필 팔로워의 게시물을 다운로드하려면 다음 명령을 입력합니다.

instaloader --login <YOUR USERNAME> @<TARGET USERNAME>

이 명령과 이전 명령의 차이점은 대상 사용자 이름 앞에 있는 @입니다.

Instaloader 명령줄 인터페이스 사용에 대한 대안은 Python 패키지로 사용하는 것입니다. 패키지는 여기에 잘 설명되어 있습니다.

Instaloader를 사용하면 다양한 미디어 파일을 다운로드할 수 있습니다. 그러나 사용자의 약력 페이지와 같은 메타데이터를 추출하려면 Instaloader만으로는 충분하지 않습니다. 다음 방법으로 Python 스크립트를 작성하여 사용자 프로필의 데이터를 추출합니다.

Instagram 데이터를 다운로드하기 위한 Python 스크립트 작성

개요

이 방법에서는 Instagram 데이터를 Python으로 다운로드하는 간단한 스크립트를 작성합니다. 이 방법은 공개 프로필에서 데이터를 추출하기 위해 상대적으로 알려지지 않은 Instagram JSON API를 사용합니다.

이 API가 작동하는 방식은 프로필 URL 끝에 쿼리 ​​__a=1&__d=1을 추가하면 Instagram이 프로필에 대한 JSON 데이터로 응답하는 것입니다.

예를 들어 내 사용자 이름은 0xanesu입니다. 결과적으로 https://instagram.com/instagram/?__a=1&__d=1에 요청하면 내 프로필에 대한 JSON 데이터를 응답으로 받게 됩니다.

스크립트 작성

Python에서 요청하기 위해 Python 요청 모듈을 사용할 것입니다. 그러나 pycURL, urllib 또는 HTTP 요청을 만드는 데 선호하는 다른 클라이언트 라이브러리를 사용할 수도 있습니다. 시작하려면 pip를 사용하여 요청 모듈을 설치합니다.

pip install requests

설치가 완료되면 파일을 열어 스크립트를 작성하고 요청 모듈에서 get 기능을 가져옵니다. 또한 json에서 load 함수도 가져옵니다. 이는 JSON 응답을 구문 분석하는 데 사용됩니다.

from requests import get
from json import loads

데이터를 가져온 후에는 URL을 Instagram 프로필에 저장하는 변수를 만듭니다.

url="https://instagram.com/<YOUR USERNAME HERE>"

앞서 언급했듯이 프로필에서 Instagram 데이터를 추출하려면 __a=1 및 __d=1 쿼리 매개변수를 추가해야 합니다. 이를 정의하기 위해 매개변수를 사용하여 사전 객체를 생성합니다.

params = { '__a': 1, '__d': 1 }

요청을 승인하려면 Instagram에 세션 ID가 필요합니다. 나중에 세션 ID를 얻는 방법을 알려드리겠습니다. 지금은 나중에 대체할 자리 표시자 값을 입력합니다.

cookies = { 'sessionid': '<YOUR SESSION ID HERE>' }

다음으로 요청이 성공했을 때 실행할 함수를 정의합니다.

def on_success(response):
    profile_data_json = response.text
    parsed_data = loads(profile_data_json)
    
    print('User fullname:', parsed_data['graphql']['user']['full_name'])
    print('User bio:', parsed_data['graphql']['user']['biography'])

내가 정의한 함수는 응답 개체를 가져오고 응답 본문에서 JSON을 추출한 다음 JSON을 개체로 구문 분석합니다. 이후에는 프로필의 전체 이름과 약력만 추출하고 있습니다.

  TikTok, Instagram 또는 YouTube 동영상을 위한 7가지 강력한 GIF 편집기 koreantech.org

다음으로 오류가 있을 때 실행할 함수를 정의합니다.

def on_error(response):
    # Printing the error if something went wrong
    print('Something went wrong')
    print('Error Code:', response.status_code)
    print('Reason:', response.reason)

그런 다음 get 함수를 호출하여 URL, 매개 변수 및 쿠키를 인수로 전달하여 요청을 만듭니다.

response = get(url, params, cookies=cookies)

그런 다음 마지막으로 오류의 상태 코드를 확인합니다. 상태가 200이면 on_success 함수를 호출합니다. 아니면 그냥 on_error 함수를 호출합니다.

if response.status_code == 200:
    on_success(response)
else:
    on_error(response)

이 시점에서 코드 작성이 완료되었습니다. 남은 것은 sessionid를 얻는 것입니다. 세션 ID를 얻으려면 Google 크롬을 열고 웹에서 Instagram을 엽니다. 로그인했는지 확인한 다음 Ctrl + Shift + I 또는 Cmd +Shift + I를 사용하여 Dev Tools를 엽니다.

Dev Tools가 열린 상태에서 Application 탭을 엽니다.

그런 다음 쿠키 하위 메뉴를 클릭하여 Instagram에서 사용하는 쿠키를 확인합니다.

그런 다음 Dev Tools 패널에 나열될 쿠키 목록에서 sessionid 쿠키 값을 복사합니다.

세션 ID를 복사한 후 스크립트에 붙여넣고 스크립트를 실행합니다. 제 경우에는 Instagram을 사용자 이름으로 사용(https://instgram.com/instagram?__a=1&__d=1)한 결과입니다.

마찬가지로 프로필 데이터를 동적으로 다운로드할 수 있습니다. JSON API에서 반환되는 훨씬 더 많은 데이터가 있습니다. 모두 인쇄했을 때의 결과는 다음과 같습니다.

이것이 Instagram 프로필에서 데이터와 게시물을 추출하는 방법입니다.

마지막 말

이 기사에서는 Instaloader를 사용하여 게시물 및 미디어를 다운로드하는 방법을 살펴보았습니다. 그런 다음 미디어 콘텐츠보다 훨씬 더 많은 것을 포함하는 프로필 JSON 데이터를 추출하는 사용자 지정 스크립트를 작성했습니다. 이 프로젝트가 마음에 드셨다면 Python Timeit to Time Your Code에 대한 게시물을 확인하실 수 있습니다.

Instagram 경험을 최대한 활용하는 데 관심이 있다면 Qoob Stories의 Instagram 다운로더에 대한 자세한 리뷰 게시물을 확인하세요.