Instagram, s přibližně 1,21 miliardami uživatelů v roce 2021, je jednou z nejrozšířenějších sociálních sítí na světě. Podle statistik společnosti Statista, ho využívá asi 28 % celkové internetové populace.
Tento článek vám poskytne návod, jak programově získávat data z Instagramových profilů s využitím Pythonu. Představíme si dvě různé metody. První se zaměří na stahování multimediálního obsahu pomocí nástroje Instaloader. Druhá metoda vám ukáže, jak napsat jednoduchý skript v Pythonu pro získání profilových dat ve formátu JSON.
Je důležité zdůraznit, že automatizované stahování dat může být v rozporu s podmínkami používání Instagramu. Proto doporučujeme stahovat data pouze z vlastních účtů.
Využití Instaloaderu
Instaloader je Python balíček, který umožňuje stahování médií z Instagramu. Je známý svou jednoduchostí a rychlostí při extrakci a stahování dat. Pro začátek je nutné Instaloader nainstalovat pomocí nástroje pip:
pip install instaloader
Po instalaci můžete Instaloader používat buď z příkazové řádky, nebo jako součást vašeho Python skriptu.
Pro použití z příkazové řádky zadejte do terminálu příkaz instaloader
. Například pro zobrazení nápovědy použijte:
instaloader --help
Pro stažení profilového obrázku uživatele použijte parametr --profile
následovaný uživatelským jménem, tedy:
instaloader --profile <UŽIVATELSKÉ JMÉNO PROFILU>
Nicméně, pro plnou funkčnost se musíte nejdříve přihlásit. Toho docílíte použitím parametru --login
, například:
instaloader --login <VAŠE UŽIVATELSKÉ JMÉNO> --profile <UŽIVATELSKÉ JMÉNO PROFILU>
Co lze stahovat
Instalader umožňuje stahování různorodého obsahu. Následující výňatek z manuálu zobrazuje, jaké typy dat jsou dostupné ke stažení:
profile Stáhne profil. Pokud byl již stažený profil přejmenován, Instaloader jej automaticky vyhledá pomocí unikátního ID a přejmenuje složku. @profile Stáhne všechny sledované profily uživatele. Vyžaduje přihlášení. Místo @yourself zvažte použití :feed. "#hashtag" Stáhne příspěvky označené hashtagem. %location_id Stáhne příspěvky z daného místa. Vyžaduje přihlášení. :feed Stáhne příspěvky z vašeho feedu. Vyžaduje přihlášení. :stories Stáhne stories vašich sledovaných. Vyžaduje přihlášení. :saved Stáhne uložené příspěvky. Vyžaduje přihlášení. -- -shortcode Stáhne příspěvek s daným shortcodem filename.json[.xz] Opakovaně stáhne zadaný objekt. +args.txt Načte cíle (a volby) z textového souboru.
Pro stažení příspěvků konkrétního uživatele použijte příkaz:
instaloader --login <VAŠE UŽIVATELSKÉ JMÉNO> <CÍLOVÉ UŽIVATELSKÉ JMÉNO>
Kde vaše uživatelské jméno je jméno vašeho ověřeného Instagramového účtu a cílové uživatelské jméno je profil, ze kterého chcete příspěvky stáhnout.
Chcete-li stáhnout příspěvky od sledovaných cílového profilu, zadejte:
instaloader --login <VAŠE UŽIVATELSKÉ JMÉNO> @<CÍLOVÉ UŽIVATELSKÉ JMÉNO>
Zde si všimněte znaku @
před cílovým uživatelským jménem.
Kromě použití z příkazové řádky lze Instaloader integrovat do vašich Python skriptů. Detaily k balíčku naleznete v dokumentaci.
I když Instaloader efektivně stahuje mediální obsah, pro extrakci detailních metadat jako je uživatelské bio, je nutné použít jinou metodu. Následující sekce ukáže, jak vytvořit skript pro extrakci JSON dat z profilu.
Vytvoření Python skriptu pro získávání dat z Instagramu
Přehled
V této části si vytvoříme jednoduchý Python skript pro stahování dat z Instagramu. Skript využívá málo známé JSON API Instagramu pro extrakci dat z veřejných profilů.
Toto API funguje tak, že k URL adrese profilu přidáte parametry __a=1&__d=1
, načež Instagram vrátí data profilu ve formátu JSON.
Například, pokud je moje uživatelské jméno 0xanesu, pak odesláním požadavku na URL https://instagram.com/0xanesu/?__a=1&__d=1
získám JSON data svého profilu.
Psaní skriptu
Pro vytváření požadavků v Pythonu použijeme modul requests
. Můžete ale použít i pycURL
, urllib
nebo jinou HTTP klientskou knihovnu. Modul nainstalujte pomocí pip:
pip install requests
Po instalaci otevřete soubor, do kterého budete psát skript, a importujte funkci get
z modulu requests
a funkci loads
z modulu json
, která bude sloužit k parsování odpovědi JSON:
from requests import get from json import loads
Dále vytvořte proměnnou, která uloží URL vašeho Instagram profilu:
url="https://instagram.com/<VAŠE UŽIVATELSKÉ JMÉNO ZDE>"
Jak bylo zmíněno, pro extrahování dat je nutné přidat parametry __a=1
a __d=1
. Definujeme je tedy v objektu slovníku:
params = { '__a': 1, '__d': 1 }
Pro autentizaci požadavků Instagram vyžaduje ID relace. Způsob, jak získat ID relace si ukážeme později. Zatím zadáme zástupnou hodnotu:
cookies = { 'sessionid': '<VAŠE ID RELACE ZDE>' }
Dále definujte funkci, která se spustí při úspěšném požadavku:
def on_success(response): profile_data_json = response.text parsed_data = loads(profile_data_json) print('Celé jméno uživatele:', parsed_data['graphql']['user']['full_name']) print('Uživatelské bio:', parsed_data['graphql']['user']['biography'])
Tato funkce převezme odpověď, extrahuje z ní JSON, analyzuje ho do objektu a vypíše celé jméno a biografii profilu.
Nyní definujeme funkci, která se spustí při chybě:
def on_error(response): # Vypíše chybu, pokud se něco pokazí print('Nastala chyba') print('Kód chyby:', response.status_code) print('Důvod:', response.reason)
Poté zavoláme funkci get
, předáme URL, parametry a cookies jako argumenty:
response = get(url, params, cookies=cookies)
Nakonec zkontrolujeme stavový kód chyby. Pokud je 200, zavoláme funkci on_success
. V opačném případě zavoláme on_error
:
if response.status_code == 200: on_success(response) else: on_error(response)
Tímto je kód hotov. Zbývá získat sessionid
. Pro jeho získání otevřete webový prohlížeč Google Chrome a přihlaste se na Instagram. Poté otevřete vývojářské nástroje pomocí Ctrl + Shift + I
(nebo Cmd + Shift + I
na macOS).
V otevřených vývojářských nástrojích přejděte na kartu Aplikace.
Poté klikněte na podmenu Soubory cookie a uvidíte cookies používané Instagramem.
Zkopírujte hodnotu souboru cookie sessionid
ze seznamu.
Po zkopírování vložte ID relace do skriptu a spusťte jej. V mém případě, při použití instagramového uživatelského jména (https://instgram.com/instagram?__a=1&__d=1), je výstup následující:
Tímto způsobem můžeme dynamicky stahovat data profilu. JSON API vrací mnohem více dat. Následující je výstup, pokud vypíšete všechna data:
A takto se získávají data a příspěvky z Instagramových profilů.
Závěrem
V tomto článku jsme si ukázali, jak stahovat příspěvky a média pomocí nástroje Instaloader. Následně jsme si vytvořili vlastní skript pro extrakci profilových dat ve formátu JSON, který zahrnuje mnohem více informací než jen mediální obsah. Pokud se vám tento projekt líbil, možná vás zaujme i náš článek o Python Timeit pro měření výkonu kódu.
Pokud se chcete o Instagramu dozvědět více, podívejte se na náš článek o Qoob Stories: podrobná recenze stahovače Instagramu.