Hur man laddar ner Instagram-data med Python

By rik

Instagram är en global jätte inom sociala medier, med en användarbas som uppskattas till cirka 1,21 miljarder under 2021, vilket motsvarar ungefär 28 % av den totala internetpopulationen enligt Statista.

Denna artikel ger dig en vägledning i hur du på ett programmeringsmässigt sätt kan hämta Instagram-data från en profil med hjälp av Python. Vi kommer att utforska två olika metoder. Den första metoden fokuserar på att ladda ner media med hjälp av Instaloader. Den andra metoden innebär att vi skriver ett enkelt Python-skript för att få tillgång till JSON-data som rör profilen.

Det är viktigt att komma ihåg att automatiserad datahämtning kan strida mot Instagrams användarvillkor. Vi rekommenderar därför starkt att du endast hämtar data från ditt eget konto.

Användning av Instaloader

Instaloader är ett Python-paket skapat för att underlätta nedladdning av media från Instagram. Det är användarvänligt och möjliggör snabb och smidig dataextrahering. För att börja använda Instaloader, måste du först installera det via pip:

pip install instaloader

När installationen är klar kan du använda det via kommandoraden eller integrera det i dina Python-skript.

För användning via kommandoraden används kommandot instaloader. För att se hjälpinformation, anger du följande kommando i din terminal:

instaloader --help

För att ladda ner en användares profilbild, använd kommandot med flaggan –profile, följt av användarnamnet. Exempel:

instaloader --profile <ANVÄNDARNAMN FÖR PROFILEN>

För att detta kommando ska fungera, måste du först logga in. Detta gör du genom att lägga till inloggningsalternativet:

instaloader --login <DITT ANVÄNDARNAMN> --profile <ANVÄNDARNAMN FÖR PROFILEN>

Vad kan du ladda ner?

Instaloader ger dig möjlighet att ladda ner en mängd olika media. Följande utdrag från manualen visar de olika typer av innehåll som kan laddas ner:

profile               Ladda ner profil. Om en redan nedladdad profil har bytt namn, hittar Instaloader automatiskt profilen genom dess unika
                        ID och byter namn på mappen.
  @profile              Ladda ner alla som profilen följer. Kräver --login. Överväg att använda :feed istället för @yourself.
  "#hashtag"            Ladda ner #hashtag.
  %location_id          Ladda ner %location_id. Kräver --login.
  :feed                 Ladda ner bilder från ditt flöde. Kräver --login.
  :stories              Ladda ner stories från de du följer. Kräver --login.
  :saved                Ladda ner de inlägg du har sparat. Kräver --login.
  -- -shortcode         Ladda ner inlägget med given shortcode
  filename.json[.xz]    Ladda ner det givna objektet igen.
  +args.txt             Läs mål (och alternativ) från den givna textfilen.

För att ladda ner inlägg från en specifik användare, ange kommandot:

instaloader --login <DITT ANVÄNDARNAMN> <MÅLANVÄNDARNAMN>

Ditt användarnamn är det autentiserade Instagram-kontots användarnamn, och målanvändarnamnet är profilen vars inlägg du vill ladda ner.

För att ladda ner inlägg från följare av en profil, använd följande kommando:

instaloader --login <DITT ANVÄNDARNAMN> @<MÅLANVÄNDARNAMN>

Notera skillnaden i detta kommando, ett @ före målanvändarnamnet.

Förutom att använda Instaloaders kommandoradsgränssnitt kan det användas som ett Python-paket. Dokumentationen finns tillgänglig här.

Med Instaloader kan olika typer av media laddas ner. Om du däremot behöver extrahera metadata, som en användares biografi, är Instaloader inte tillräckligt. Följande metod introducerar hur du skriver ett Python-skript för att extrahera data från en användarprofil.

Skriva ett Python-skript för att ladda ner Instagram-data

Översikt

I den här metoden kommer vi att skapa ett enkelt skript i Python för att ladda ner Instagram-data. Detta tillvägagångssätt bygger på användning av ett relativt okänt Instagram JSON API som ger tillgång till data från publika profiler.

Detta API fungerar genom att om du lägger till frågan __a=1&__d=1 i slutet av en profil-URL, svarar Instagram med JSON-data om profilen.

Till exempel, om användarnamnet är 0xanesu, kommer en förfrågan till https://instagram.com/instagram/?__a=1&__d=1 att resultera i JSON-data som svar.

Att skriva skriptet

För att göra en begäran i Python, använder vi modulen Python-requests. Alternativt kan du använda pycURL, urllib eller andra klientbibliotek för HTTP-förfrågningar. Installera requests-modulen med pip:

pip install requests

När installationen är klar, öppna en fil för att skriva ditt skript och importera `get`-funktionen från requests-modulen, samt `loads`-funktionen från `json`. Den sistnämnda används för att parsa JSON-svaret.

from requests import get
from json import loads

När importen är klar, skapa en variabel för att lagra webbadressen till din Instagram-profil.

url="https://instagram.com/<DITT ANVÄNDARNAMN HÄR>"

Som tidigare nämnts behöver vi lägga till frågeparametrarna __a=1 och __d=1 för att extrahera Instagram-data. Vi definierar dessa genom ett ordboksobjekt:

params = { '__a': 1, '__d': 1 }

För att godkänna våra begäran kräver Instagram ett sessions-ID. Vi kommer att förklara hur du hittar ditt sessions-ID senare, men för tillfället lägger vi in ett platshållarvärde som du senare byter ut:

cookies = { 'sessionid': '<DITT SESSION ID HÄR>' }

Definiera sedan en funktion som körs om begäran lyckas:

def on_success(response):
    profile_data_json = response.text
    parsed_data = loads(profile_data_json)

    print('Användarens fullständiga namn:', parsed_data['graphql']['user']['full_name'])
    print('Användarens bio:', parsed_data['graphql']['user']['biography'])

Funktionen tar emot svarsobjektet, extraherar JSON från svarskroppen och analyserar sedan JSON till ett objekt. Därefter extraherar vi profilens fullständiga namn och biografi.

Definiera nu en funktion som körs vid eventuella fel:

def on_error(response):
    print('Något gick fel')
    print('Felkod:', response.status_code)
    print('Anledning:', response.reason)

Anropa sedan `get`-funktionen för att göra en begäran och skicka in URL, parametrar och cookies som argument.

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

Till sist, kontrollera statuskoden för fel. Om statusen är 200 anropas `on_success`-funktionen. Annars anropas `on_error`-funktionen.

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

Koden är nu klar. Det enda som återstår är att få fram session-ID:t. Öppna Google Chrome och Instagram i webbläsaren och se till att du är inloggad. Öppna Dev Tools med Ctrl + Shift + I eller Cmd + Shift + I.

I Dev Tools, öppna fliken Application.

Klicka sedan på undermenyn Cookies för att se cookies som används av Instagram.

Kopiera värdet på sessionid-cookien från listan.

Klistra in session-ID:t i skriptet och kör det. I mitt fall, när jag använder Instagram som användarnamn (https://instgram.com/instagram?__a=1&__d=1), är resultatet följande:

På det här sättet kan vi dynamiskt ladda ner profildata. JSON API:et returnerar mycket mer data. Här ser du resultatet av att skriva ut all data:

Det är så här du kan extrahera data och inlägg från Instagram-profiler.

Avslutande ord

Den här artikeln har visat hur man laddar ner inlägg och media med Instaloader. Vi skapade också ett anpassat skript för att extrahera JSON-profildata som innehåller mer än bara mediainnehåll. Om du gillade detta projekt, kan du vara intresserad av vår artikel om Python Timeit för att Time Your Code.

Om du är intresserad av att få ut mer av din Instagram-upplevelse, kolla in vårt inlägg om Qoob Stories: en detaljerad recension av Instagram-nedladdningsprogrammet.