Згідно зі статистичними даними 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.