Statista 자료에 따르면, 2021년 기준 인스타그램은 약 12억 1천만 명의 사용자를 확보하며 전 세계적으로 손꼽히는 소셜 미디어 네트워크 중 하나입니다. 이는 인터넷 사용자의 약 28%에 해당하는 수치입니다.
이 글에서는 Python을 사용하여 인스타그램 프로필에서 데이터를 프로그래밍 방식으로 내려받는 두 가지 방법을 소개합니다. 첫 번째 방법은 Instaloader를 활용하여 미디어를 다운로드하는 것이며, 두 번째 방법은 프로필에 대한 JSON 데이터를 가져오는 간단한 Python 스크립트를 직접 작성하는 것입니다.
데이터 스크래핑은 인스타그램 서비스 약관에 위배될 수 있으므로, 본인 계정에서만 데이터를 다운로드하는 것을 권장합니다.
Instaloader 활용법
Instaloader는 Python 패키지로, 인스타그램 미디어를 다운로드하는 데 특화되어 있습니다. 사용법이 매우 간단하며, 데이터를 빠르고 쉽게 추출하고 내려받을 수 있다는 장점이 있습니다. Instaloader를 사용하기 위해서는 먼저 pip를 통해 설치해야 합니다.
pip install instaloader
설치가 완료되면, 명령줄 인터페이스를 통해 사용하거나 Python 스크립트 내에서 패키지로 활용할 수 있습니다.
명령줄에서 사용하려면 `instaloader` 명령을 사용합니다. 예를 들어, 도움말 정보를 확인하려면 터미널에 다음 명령어를 입력하면 됩니다.
instaloader --help
특정 사용자의 프로필 사진을 다운로드하려면, 사용자 이름과 함께 `–profile` 태그를 사용하여 명령을 입력합니다. 아래와 같이 작성합니다.
instaloader --profile <프로필 사용자 이름>
하지만 이 명령이 정상적으로 작동하려면 먼저 로그인을 해야 합니다. 로그인 정보를 전달하려면 다음과 같이 `–login` 옵션을 추가합니다.
instaloader --login <본인 사용자 이름> --profile <프로필 사용자 이름>
다운로드 가능한 항목
Instaloader를 사용하면 다양한 종류의 미디어를 다운로드할 수 있습니다. 매뉴얼 페이지에서 발췌한 내용을 보면, 다운로드 가능한 항목을 모두 확인할 수 있습니다.
profile 프로필 다운로드. 이미 다운로드된 프로필의 이름이 변경된 경우, Instaloader는 고유 ID를 통해 해당 프로필을 자동으로 찾아 폴더 이름을 변경합니다. @profile 프로필이 팔로우하는 모든 사용자 다운로드. --login 필요. @yourself보다는 :feed 사용을 고려하십시오. "#hashtag" #해시태그 다운로드. %location_id %위치 ID 다운로드. --login 필요. :feed 본인 피드 게시물 다운로드. --login 필요. :stories 본인이 팔로우하는 사용자들의 스토리 다운로드. --login 필요. :saved 저장한 게시물 다운로드. --login 필요. -- -shortcode 주어진 쇼트코드의 게시물 다운로드 filename.json[.xz] 주어진 객체 재다운로드 +args.txt 주어진 텍스트 파일에서 대상 (및 옵션) 읽기
특정 사용자의 게시물을 다운로드하려면 다음 명령어를 입력합니다.
instaloader --login <본인 사용자 이름> <대상 사용자 이름>
여기서 ‘본인 사용자 이름’은 인증된 인스타그램 계정의 사용자 이름이며, ‘대상 사용자 이름’은 다운로드하고자 하는 게시물의 프로필입니다.
프로필 팔로워들의 게시물을 다운로드하려면 다음 명령어를 입력합니다.
instaloader --login <본인 사용자 이름> @<대상 사용자 이름>
이전 명령어와의 차이점은 대상 사용자 이름 앞에 `@` 기호가 붙는다는 것입니다.
Instaloader 명령줄 인터페이스를 사용하는 대신 Python 패키지로 사용하는 방법도 있습니다. 패키지 사용에 대한 자세한 설명은 여기에서 확인할 수 있습니다.
Instaloader를 통해 다양한 미디어 파일을 다운로드할 수 있지만, 사용자 소개 페이지와 같은 메타데이터를 추출하는 데는 한계가 있습니다. 이 경우, 다음 방법으로 Python 스크립트를 작성하여 사용자 프로필 데이터를 추출할 수 있습니다.
인스타그램 데이터 다운로드를 위한 Python 스크립트 작성
개요
이 방법에서는 Python을 사용하여 인스타그램 데이터를 다운로드하는 간단한 스크립트를 작성합니다. 이 방법은 공개 프로필에서 데이터를 추출하기 위해 인스타그램의 잘 알려지지 않은 JSON API를 활용합니다.
이 API는 프로필 URL 끝에 `?__a=1&__d=1` 쿼리를 추가하면 인스타그램이 해당 프로필에 대한 JSON 데이터를 반환하는 방식으로 작동합니다.
예를 들어, 제 사용자 이름이 `0xanesu`라면, `https://instagram.com/0xanesu/?__a=1&__d=1`에 요청을 보내면 제 프로필에 대한 JSON 데이터를 응답으로 받을 수 있습니다.
스크립트 작성
Python에서 HTTP 요청을 보내기 위해 `requests` 모듈을 사용할 것입니다. 물론 `pycURL`, `urllib` 또는 선호하는 다른 HTTP 요청 클라이언트 라이브러리를 사용해도 됩니다. 먼저 pip를 사용하여 `requests` 모듈을 설치합니다.
pip install requests
설치가 완료되면 파일을 열어 스크립트를 작성하고, `requests` 모듈에서 `get` 함수를 가져옵니다. 또한, JSON 응답을 구문 분석하기 위해 `json` 모듈에서 `loads` 함수를 가져옵니다.
from requests import get from json import loads
데이터를 가져온 후, 인스타그램 프로필 URL을 저장할 변수를 만듭니다.
url="https://instagram.com/<사용자 이름>"
앞서 언급했듯이, 프로필에서 인스타그램 데이터를 추출하려면 `?__a=1` 및 `&__d=1` 쿼리 매개변수를 추가해야 합니다. 이를 위해 매개변수를 사용하여 사전 객체를 생성합니다.
params = { '__a': 1, '__d': 1 }
요청을 승인하려면 인스타그램에서 세션 ID가 필요합니다. 나중에 세션 ID를 얻는 방법을 알려드리겠습니다. 지금은 자리 표시자 값을 임시로 입력해 둡니다.
cookies = { 'sessionid': '<세션 ID>' }
다음으로, 요청이 성공했을 때 실행할 함수를 정의합니다.
def on_success(response): profile_data_json = response.text parsed_data = loads(profile_data_json) print('사용자 전체 이름:', parsed_data['graphql']['user']['full_name']) print('사용자 소개:', parsed_data['graphql']['user']['biography'])
정의한 함수는 응답 객체를 가져와, 응답 본문에서 JSON을 추출한 다음 JSON을 객체로 구문 분석합니다. 이후, 프로필의 전체 이름과 소개만 추출하여 출력합니다.
다음으로, 오류 발생 시 실행할 함수를 정의합니다.
def on_error(response): # 오류 발생 시 오류 메시지 출력 print('오류가 발생했습니다.') print('오류 코드:', response.status_code) print('오류 원인:', 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)
이로써 코드 작성이 완료되었습니다. 이제 남은 것은 세션 ID를 얻는 것입니다. 세션 ID를 얻으려면 Google Chrome을 열고 웹에서 인스타그램을 엽니다. 로그인이 되어 있는지 확인한 다음, `Ctrl + Shift + I` (Windows) 또는 `Cmd + Shift + I` (macOS)를 눌러 개발자 도구를 엽니다.
개발자 도구가 열린 상태에서 ‘Application’ 탭을 클릭합니다.
그런 다음 ‘Cookies’ 하위 메뉴를 클릭하여 인스타그램에서 사용되는 쿠키를 확인합니다.
개발자 도구 패널에 나열된 쿠키 목록에서 `sessionid` 쿠키 값을 복사합니다.
세션 ID를 복사한 후 스크립트에 붙여넣고 스크립트를 실행합니다. 제 경우에는 `https://instgram.com/instagram?__a=1&__d=1` URL을 사용하여 인스타그램의 사용자 이름을 사용했습니다. 아래는 실행 결과입니다.
이와 같은 방식으로 프로필 데이터를 동적으로 다운로드할 수 있습니다. JSON API에서 반환되는 더 많은 데이터가 있으며, 이를 모두 출력했을 때의 결과는 다음과 같습니다.
이것이 인스타그램 프로필에서 데이터와 게시물을 추출하는 방법입니다.
마지막으로
이 글에서는 Instaloader를 사용하여 게시물과 미디어를 다운로드하는 방법과, 미디어 콘텐츠보다 더 많은 정보를 포함하는 프로필 JSON 데이터를 추출하는 맞춤형 스크립트를 작성하는 방법을 살펴보았습니다. 이 프로젝트가 마음에 드셨다면, Python 코드 실행 시간을 측정하는 Python Timeit to Time Your Code 관련 게시물을 확인해 보세요.
인스타그램 경험을 최대한 활용하는 데 관심이 있다면, Qoob Stories의 인스타그램 다운로더에 대한 자세한 리뷰 게시물을 확인해 보세요.