Hvordan laste ned Instagram-data ved hjelp av Python

Instagram er et av verdens største sosiale medienettverk, med rundt 1,21 milliarder brukere per 2021, eller omtrent 28 % av internett, ifølge Statista.

Denne artikkelen er en guide for hvordan du programmatisk laster ned Instagram-data fra en profil ved hjelp av Python på to metoder. Den første metoden er å laste ned media ved hjelp av Instaloader. Den andre er å skrive et enkelt Python-skript for å få JSON-data om profilen.

Det er viktig å merke seg at skraping av data kan bryte med Instagrams vilkår for bruk, og vi anbefaler at du kun laster ned data fra kontoen din.

Bruker Instaloader

Instaloader er en Python-pakke for nedlasting av Instagram-medier. Det er utrolig enkelt å bruke og gjør det raskt og enkelt å trekke ut og laste ned data. For å begynne å bruke Instaloader, installer den først ved å bruke pip:

pip install instaloader

Når den er installert, kan du bruke den fra kommandolinjegrensesnittet eller som en pakke i et Python-skript.

For å bruke den fra kommandolinjen, bruker du kommandoen instaloader. For å vise hjelpeinformasjon, skriver du inn følgende kommando i terminalen din:

instaloader --help

For å laste ned profilbildet til en bruker, skriver du inn kommandoen med en –profile-tag, etterfulgt av brukernavnet. Som så:

instaloader --profile <USERNAME OF THE PROFILE>

Men for at denne kommandoen skal fungere, må du først logge på. For å gjøre det, sender du inn påloggingsalternativet slik:

instaloader --login <YOUR USERNAME> --profile <USERNAME OF THE PROFILE>

Hva du skal laste ned

Med Instaloader kan du laste ned forskjellige medier. Dette utdraget av manualsiden viser deg alle de forskjellige tingene du kan laste ned:

  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.

For å laste ned innleggene til en bestemt bruker, skriver du inn kommandoen:

instaloader --login <YOUR USERNAME> <TARGET USERNAME>

I dette tilfellet er brukernavnet ditt brukernavnet til din autentiserte Instagram-konto; målbrukernavnet er profilen hvis innlegg du vil laste ned.

  Hvordan fikse Instagram-historien min som sitter fast ved innlegg/sending (full veiledning)

For å laste ned innlegg fra følgere av en profil, skriver du inn kommandoen:

instaloader --login <YOUR USERNAME> @<TARGET USERNAME>

Merk at forskjellen mellom denne kommandoen og den før er @ foran målbrukernavnet.

Et alternativ til å bruke Instaloader-kommandolinjegrensesnittet er å bruke det som en Python-pakke. Pakken er godt dokumentert her.

Med Instaloader kan du laste ned forskjellige mediefiler. Men hvis du ønsket å trekke ut metadata som en brukers bioside, ville ikke Instaloader alene være nok. Med den neste metoden vil du skrive et Python-skript for å trekke ut en brukerprofils data.

Skrive et Python-skript for å laste ned Instagram-data

Oversikt

I denne metoden vil vi skrive et enkelt skript for å laste ned Instagram-data i Python. Denne metoden er avhengig av å bruke en relativt ukjent Instagram JSON API for å trekke ut data fra offentlige profiler.

Måten denne API-en fungerer på er at hvis du legger til spørringen __a=1&__d=1 på slutten av profilens URL, svarer Instagram med JSON-data om profilen.

  Hvordan vite om noen leser meldingen din på Instagram

For eksempel er brukernavnet mitt 0xanesu. Som et resultat, hvis jeg sender en forespørsel til https://instagram.com/instagram/?__a=1&__d=1, vil jeg få tilbake JSON-data om profilen min som et svar.

Å skrive manuset

For å gjøre forespørselen i Python, kommer vi til å bruke Python-forespørselsmodulen. Du kan imidlertid også bruke pycURL, urllib eller et hvilket som helst annet klientbibliotek du foretrekker å bruke til å lage HTTP-forespørsler. For å begynne, installer forespørselsmodulen ved å bruke pip.

pip install requests

Når det er installert, åpne en fil for å skrive skriptet ditt i og importere get-funksjonen fra forespørselsmodulen. I tillegg kan du også importere loads-funksjonen fra json. Dette vil bli brukt til å analysere JSON-svaret.

from requests import get
from json import loads

Når du har importert dataene, lag en variabel som lagrer URL-en til Instagram-profilen din.

url="https://instagram.com/<YOUR USERNAME HERE>"

Som nevnt før, for å trekke ut Instagram-data fra en profil, må du legge til spørringsparametrene __a=1 og __d=1. For å definere disse lager vi et ordbokobjekt med parameterne.

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

For å godkjenne forespørsler vi gjør, krever Instagram en økt-ID. Senere vil jeg vise deg hvordan du får økt-ID-en din. For nå er det bare å sette inn en plassholderverdi som du vil erstatte senere.

cookies = { 'sessionid': '<YOUR SESSION ID HERE>' }

Definer deretter en funksjon som skal kjøres når forespørselen er vellykket.

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'])

Funksjonen jeg har definert vil ta inn responsobjektet, trekke ut JSON fra responskroppen og deretter analysere JSON til et objekt. Etter dette trekker jeg bare ut hele navnet og biografien til profilen.

Definer deretter funksjonen som skal kjøre hvis det er en feil.

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)

Deretter kaller vi get-funksjonen for å lage forespørselen, og sender inn URL, parametere og informasjonskapsler som argumenter.

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

Til slutt sjekker vi statuskoden til feilen. Hvis statusen er 200, kaller vi on_success-funksjonen. Ellers kaller vi bare on_error-funksjonen.

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

På dette tidspunktet er vi ferdige med å skrive koden. Det som gjenstår er å få sesjons-ID. For å få økt-ID-en, åpne Google Chrome og åpne Instagram på nettet. Sørg for at du er logget på, og åpne deretter Dev Tools ved å bruke Ctrl + Shift + I eller Cmd +Shift + I.

  Hvordan finne kontakter på Instagram

Åpne Program-fanen med Dev Tools åpen.

Klikk deretter på undermenyen Cookies for å se informasjonskapsler brukt av Instagram.

Deretter kopierer du verdien til sessionid-informasjonskapselen fra listen over informasjonskapsler som vil bli oppført i Dev Tools-panelet.

Når du har kopiert sesjons-IDen, limer du den inn i skriptet og kjører skriptet. I mitt tilfelle, ved å bruke Instagram som brukernavn (https://instgram.com/instagram?__a=1&__d=1), er dette resultatet.

Og akkurat som det er vi i stand til dynamisk å laste ned profildata. Det er så mye mer data som returneres fra JSON API. Dette er resultatet når du skriver ut alt:

Og det er slik du trekker ut data og innlegg fra Instagram-profiler.

Siste ord

I denne artikkelen gikk vi gjennom hvordan du laster ned innlegg og medier ved hjelp av Instaloader. Vi skrev deretter et tilpasset skript for å trekke ut JSON-profildata som inkluderer så mye mer enn bare medieinnholdet. Hvis du likte dette prosjektet, kan det være lurt å sjekke ut innlegget vårt om Python Timeit for å Time Your Code.

Hvis du er interessert i å få mer ut av Instagram-opplevelsen din, sjekk ut innlegget vårt på Qoob Stories: en detaljert anmeldelse av Instagram-nedlasteren.