Як завантажити дані Instagram за допомогою Python

Згідно зі статистичними даними Statista, Instagram займає лідируючі позиції серед соціальних мереж у світі. У 2021 році платформа нараховувала близько 1,21 мільярда користувачів, що становить приблизно 28% від загальної кількості інтернет-користувачів.

У цій статті ми розглянемо два способи програмного завантаження інформації з профілів Instagram за допомогою мови Python. Перший метод передбачає використання інструменту Instaloader для завантаження медіафайлів. Другий – створення простого скрипту на Python для отримання даних у форматі JSON профілю користувача.

Важливо пам’ятати, що копіювання даних може порушувати умови використання Instagram, тому рекомендується завантажувати інформацію лише зі свого власного облікового запису.

Застосування Instaloader

Instaloader є Python-пакетом, розробленим для завантаження медіаконтенту з Instagram. Він вирізняється простотою використання, що дозволяє швидко та легко видобувати та зберігати дані. Для початку роботи з Instaloader, необхідно його встановити, використовуючи pip:

pip install instaloader

Після завершення інсталяції, ви можете використовувати його як з командного рядка, так і як пакет у вашому Python-скрипті.

Щоб скористатись інструментом з командного рядка, введіть команду instaloader. Наприклад, для отримання довідкової інформації, введіть наступну команду у терміналі:

instaloader --help

Щоб завантажити зображення з профілю користувача, введіть команду з параметром –profile, а потім ім’я користувача. Ось приклад:

instaloader --profile <ІМ'Я КОРИСТУВАЧА>

Проте, щоб ця команда спрацювала, потрібно спочатку увійти у свій аккаунт. Для цього використовуйте параметр –login наступним чином:

instaloader --login <ВАШЕ ІМ'Я КОРИСТУВАЧА> --profile <ІМ'Я КОРИСТУВАЧА>

Які дані можна завантажувати

Instaloader надає можливість завантажувати різноманітні типи медіафайлів. Нижче представлено перелік елементів, які доступні для завантаження:

profile               Завантаження профілю. Якщо профіль вже був завантажений і перейменований, Instaloader автоматично ідентифікує його за унікальним ID та перейменовує папку.
@profile              Завантаження всіх підписок профілю. Потрібне використання --login. Можна розглянути варіант використання :feed замість @yourself.
"#hashtag"            Завантаження #hashtag.
%location_id          Завантаження %location_id. Потрібне використання --login.
:feed                 Завантаження фотографій з вашої стрічки. Потрібне використання --login.
:stories              Завантаження історій ваших підписок. Потрібне використання --login.
:saved                Завантаження збережених публікацій. Потрібне використання --login.
-- -shortcode         Завантаження публікації за коротким кодом.
filename.json[.xz]    Повторне завантаження вказаного об'єкта.
+args.txt             Читання цілей (та параметрів) з вказаного текстового файлу.

Для завантаження публікацій конкретного користувача, використайте наступну команду:

instaloader --login <ВАШЕ ІМ'Я КОРИСТУВАЧА> <ЦІЛЬОВЕ ІМ'Я КОРИСТУВАЧА>

У цьому випадку, ваше ім’я користувача — це ім’я вашого аутентифікованого облікового запису Instagram, а цільове ім’я користувача — це профіль, публікації якого ви бажаєте завантажити.

Щоб завантажити публікації з підписок користувача, введіть команду:

instaloader --login <ВАШЕ ІМ'Я КОРИСТУВАЧА> @<ЦІЛЬОВЕ ІМ'Я КОРИСТУВАЧА>

Зверніть увагу, що різниця між цією командою та попередньою полягає в наявності символу “@” перед цільовим ім’ям користувача.

Альтернативою застосуванню Instaloader з командного рядка є використання його як пакета Python. Детальна документація пакета доступна тут.

Instaloader дозволяє завантажувати різноманітні медіафайли. Однак, якщо вам потрібні метадані, такі як біографія користувача, одного Instaloader буде недостатньо. У наступному методі ми створимо Python-скрипт для вилучення даних профілю користувача.

Створення Python-скрипту для завантаження даних Instagram

Загальний огляд

В цьому підході ми напишемо нескладний скрипт на Python для завантаження даних Instagram. Цей метод базується на використанні API Instagram JSON, який не є широко відомим, для отримання інформації з загальнодоступних профілів.

Суть цього API полягає в тому, що якщо додати запит __a=1&__d=1 у кінець URL-адреси профілю, Instagram поверне дані профілю у форматі JSON.

Наприклад, якщо моє ім’я користувача 0xanesu, то запит на адресу https://instagram.com/instagram/?__a=1&__d=1 поверне дані JSON про мій профіль.

Написання скрипту

Для виконання запитів у Python ми будемо використовувати модуль requests. Ви також можете застосувати pycURL, urllib або будь-яку іншу клієнтську бібліотеку для HTTP-запитів. Для початку, встановимо модуль requests за допомогою pip.

pip install requests

Після встановлення, відкрийте файл для створення скрипту та імпортуйте функцію get з модуля requests. Також імпортуйте функцію loads з модуля json, яка буде використовуватись для обробки JSON-відповіді.

from requests import get
from json import loads

Після імпорту необхідних бібліотек, створіть змінну, в якій зберігатиметься URL-адреса вашого профілю Instagram.

url="https://instagram.com/<ВАШЕ ІМ'Я КОРИСТУВАЧА ТУТ>"

Як згадувалось раніше, для отримання даних профілю, необхідно додати параметри запиту __a=1 та __d=1. Для цього ми створимо об’єкт-словник з цими параметрами.

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

Для авторизації запитів Instagram вимагає ідентифікатор сесії. Далі ми розглянемо, як його отримати. Наразі вставте заповнювач, який ви заміните пізніше.

cookies = { 'sessionid': '<ВАШ ІДЕНТИФІКАТОР СЕСІЇ ТУТ>' }

Тепер визначимо функцію, яка буде викликана у разі успішного виконання запиту.

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 з тіла відповіді та аналізуватиме його в об’єкт. Після цього витягуємо тільки повне ім’я та біографію профілю.

Далі визначимо функцію, яка буде викликана у випадку виникнення помилки.

def on_error(response):
    # Виводимо інформацію про помилку
    print('Виникла помилка')
    print('Код помилки:', response.status_code)
    print('Причина:', response.reason)

Тепер викличемо функцію get для виконання запиту, передаючи URL, параметри та cookie як аргументи.

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

Нарешті, перевіримо код статусу відповіді. Якщо код дорівнює 200, викликаємо функцію on_success. В іншому випадку викликаємо функцію on_error.

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

На цьому етапі код завершено. Залишилось отримати ідентифікатор сесії. Для цього, відкрийте Google Chrome та зайдіть на Instagram у веб-версії. Переконайтеся, що ви увійшли в свій акаунт, потім відкрийте інструменти розробника, натиснувши Ctrl + Shift + I або Cmd + Shift + I.

Відкривши інструменти розробника, перейдіть на вкладку “Application”.

Далі перейдіть до підменю “Cookies” для перегляду файлів cookie, які використовує Instagram.

Скопіюйте значення файлу cookie з назвою “sessionid” зі списку файлів cookie, який відображається на панелі розробника.

Після копіювання ідентифікатора сесії, вставте його у скрипт та запустіть його. У моєму випадку, використовуючи Instagram як ім’я користувача (https://instgram.com/instagram?__a=1&__d=1), отримаємо наступний результат.

Таким чином, ми можемо динамічно завантажувати дані профілю. З JSON API можна отримати набагато більше даних. Ось приклад, якщо вивести всю отриману інформацію:

Саме так можна вилучати дані та публікації з профілів Instagram.

Заключні коментарі

У цій статті ми розглянули методи завантаження публікацій та медіа за допомогою Instaloader. Потім ми розробили скрипт для вилучення JSON-даних профілю, які містять набагато більше інформації, ніж просто медіаконтент. Якщо вам сподобався цей проект, радимо ознайомитися з нашою статтею про використання Python Timeit для вимірювання продуктивності вашого коду.

Для отримання більшого досвіду роботи з Instagram, зверніть увагу на наш огляд Qoob Stories: детальний огляд завантажувача Instagram.