Как да изтеглите данни от Instagram с помощта на Python

Instagram е една от най-големите социални медийни мрежи в света, с около 1,21 милиарда потребители към 2021 г., или около 28% от интернет, според Statista.

Тази статия е ръководство за това как програмно да изтеглите данни от Instagram от профил с помощта на Python по два метода. Първият метод е изтегляне на мултимедия с помощта на Instaloader. Второто е писане на прост Python скрипт за получаване на JSON данни за профила.

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

Използване на Instaloader

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. Този метод разчита на използването на относително неизвестен API на Instagram JSON за извличане на данни от публични профили.

  Как да се отървете от предложените публикации в Instagram

Начинът, по който работи този API, е, че ако добавите заявката __a=1&__d=1 в края на URL адреса на вашия профил, Instagram отговаря с JSON данни за профила.

Например моето потребителско име е 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 в обект. След това извличам само пълното име и биографията на профила.

  Как да изключите известията на живо в Instagram

След това дефинирайте функцията, която ще се изпълнява, ако има грешка.

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. За да получите идентификатора на сесията, отворете своя Google Chrome и отворете Instagram в мрежата. Уверете се, че сте влезли, след което отворете Dev Tools, като използвате Ctrl + Shift + I или Cmd + Shift + I.

С отворени Dev Tools отворете раздела Application.

След това щракнете върху подменюто Бисквитки, за да видите бисквитките, използвани от Instagram.

След което копирайте стойността на бисквитката sessionid от списъка с бисквитки, който ще бъде посочен в панела Dev Tools.

След като копирате идентификатора на сесията, поставете го в скрипта и изпълнете скрипта. В моя случай, използвайки Instagram като потребителско име (https://instgram.com/instagram?__a=1&__d=1), това е резултатът.

И точно така, ние сме в състояние динамично да изтегляме данни от профила. Има толкова много повече данни, които се връщат от JSON API. Това е резултатът, когато отпечатате всичко:

И така извличате данни и публикации от профили в Instagram.

Заключителни думи

В тази статия разгледахме как да изтегляте публикации и медии с помощта на Instaloader. След това написахме персонализиран скрипт за извличане на профилни JSON данни, които включват много повече от медийното съдържание. Ако ви е харесал този проект, може да искате да разгледате публикацията ни в Python Timeit за измерване на вашия код.

Ако се интересувате да извлечете повече от изживяването си в Instagram, вижте нашата публикация в Qoob Stories: подробен преглед на програмата за изтегляне на Instagram.