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; целевото потребителско име е потребителският профил, чиито публикации искате да изтеглите.
За да изтеглите публикации от последователите на даден профил, трябва да въведете командата:
instaloader --login <YOUR USERNAME> @<TARGET USERNAME>
Обърнете внимание, че разликата между тази команда и тази преди това е @ преди целевото потребителско име.
Алтернатива на използването на интерфейса на командния ред на Instaloader е да го използвате като пакет на Python. Пакетът е добре документиран тук.
С Instaloader можете да изтегляте различни медийни файлове. Въпреки това, ако искате да извлечете метаданни, като страница с биографии на потребител, само Instaloader няма да е достатъчен. Със следващия метод ще напишете скрипт на Python за извличане на данни от потребителски профил.
Писане на Python скрипт за изтегляне на данни от Instagram
Преглед
В този метод ще напишем прост скрипт за изтегляне на данни от Instagram в Python. Този метод разчита на използването на относително неизвестен API на Instagram JSON за извличане на данни от публични профили.
Начинът, по който работи този 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 в обект. След това извличам само пълното име и биографията на профила.
След това дефинирайте функцията, която ще се изпълнява, ако има грешка.
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.