Как загрузить данные Instagram с помощью Python

По данным Statista, Instagram — одна из крупнейших социальных сетей в мире, насчитывающая около 1,21 миллиарда пользователей по состоянию на 2021 год, или около 28% Интернета.

Эта статья представляет собой руководство о том, как программно загрузить данные Instagram из профиля с помощью Python двумя способами. Первый способ — загрузка мультимедиа с помощью Instaloader. Второй — написание простого скрипта на Python для получения данных о профиле в формате JSON.

Важно отметить, что очистка данных может нарушать условия обслуживания Instagram, и мы рекомендуем вам загружать данные только из вашей учетной записи.

Использование инсталоадера

Instaloader — это пакет Python для загрузки медиафайлов из Instagram. Он невероятно прост в использовании и позволяет быстро и легко извлекать и загружать данные. Чтобы начать использовать 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 для извлечения данных профиля пользователя.

Написание скрипта Python для загрузки данных Instagram

Обзор

В этом методе мы напишем простой скрипт для загрузки данных Instagram на Python. Этот метод основан на использовании относительно неизвестного Instagram JSON API для извлечения данных из общедоступных профилей.

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

  Как использовать стикер «Добавь свой» в истории Instagram

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

Написание сценария

Чтобы сделать запрос на Python, мы будем использовать модуль запросов Python. Однако вы также можете использовать pycURL, urllib или любую другую клиентскую библиотеку, которую вы предпочитаете использовать для выполнения HTTP-запросов. Для начала установите модуль запросов с помощью pip.

pip install requests

После того, как это будет установлено, откройте файл, чтобы написать свой скрипт, и импортируйте функцию get из модуля запросов. Кроме того, также импортируйте функцию загрузки из json. Это будет использоваться для анализа ответа 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 требуется идентификатор сеанса. Позже я покажу вам, как получить идентификатор сеанса. А пока просто введите значение-заполнитель, которое вы замените позже.

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 в объект. После этого я извлекаю только полное имя и биографию профиля.

Затем определите функцию, которая будет выполняться при возникновении ошибки.

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-адрес, параметры и файлы cookie в качестве аргументов.

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

Затем, наконец, мы проверяем код состояния ошибки. Если статус равен 200, мы вызываем функцию on_success. В противном случае мы просто вызываем функцию on_error.

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

На этом мы закончили писать код. Осталось получить sessionid. Чтобы получить идентификатор сеанса, откройте Google Chrome и откройте Instagram в Интернете. Убедитесь, что вы вошли в систему, затем откройте Dev Tools, используя Ctrl + Shift + I или Cmd + Shift + I.

  Как поделиться своим живым видео в Instagram в течение 24 часов

Открыв Dev Tools, откройте вкладку Application.

Затем щелкните подменю «Файлы cookie», чтобы просмотреть файлы 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.