Come scaricare i dati di Instagram usando Python

Instagram è una delle più grandi reti di social media al mondo, con circa 1,21 miliardi di utenti nel 2021, ovvero circa il 28% di Internet, secondo Statista.

Questo articolo è una guida su come scaricare a livello di codice i dati di Instagram da un profilo utilizzando Python in due metodi. Il primo metodo è il download di file multimediali tramite Instaloader. Il secondo è scrivere un semplice script Python per ottenere dati JSON sul profilo.

È importante notare che lo scraping dei dati potrebbe violare i termini di servizio di Instagram e ti consigliamo di scaricare solo i dati dal tuo account.

Utilizzando Instaloader

Instaloader è un pacchetto Python per il download dei media di Instagram. È incredibilmente facile da usare e rende l’estrazione e il download dei dati facile e veloce. Per iniziare a utilizzare Instaloader, per prima cosa installalo utilizzando pip:

pip install instaloader

Una volta installato, puoi usarlo dalla sua interfaccia a riga di comando o come pacchetto in uno script Python.

Per usarlo dalla riga di comando, usa il comando instaloader. Ad esempio, per visualizzare le informazioni della guida, inserisci il seguente comando nel tuo terminale:

instaloader --help

Per scaricare l’immagine del profilo di un utente, inserisci il comando con un tag –profile, seguito dal nome utente. Così:

instaloader --profile <USERNAME OF THE PROFILE>

Ma affinché questo comando funzioni, devi prima accedere. Per fare ciò, passa l’opzione di accesso quindi:

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

Cosa scaricare

Con Instaloader, puoi scaricare diversi media. Questo estratto della pagina del manuale mostra tutte le diverse cose che puoi scaricare:

  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.

Per scaricare i post di un particolare utente, devi inserire il comando:

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

In questo caso, il tuo nome utente è il nome utente del tuo account Instagram autenticato; il nome utente di destinazione è il profilo di cui desideri scaricare i post.

  Come visualizzare le vecchie storie di Instagram

Per scaricare i post dai follower di un profilo, devi inserire il comando:

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

Nota che la differenza tra questo comando e quello precedente è la @ prima del nome utente di destinazione.

Un’alternativa all’utilizzo dell’interfaccia della riga di comando di Instaloader consiste nell’utilizzarla come pacchetto Python. Il pacchetto è ben documentato qui.

Con Instaloader puoi scaricare diversi file multimediali. Tuttavia, se si desidera estrarre metadati come la pagina bio di un utente, Instaloader da solo non sarebbe sufficiente. Con il metodo successivo, scriverai uno script Python per estrarre i dati di un profilo utente.

Scrivere uno script Python per scaricare i dati di Instagram

Panoramica

In questo metodo, scriveremo un semplice script per scaricare i dati di Instagram in Python. Questo metodo si basa sull’utilizzo di un’API JSON di Instagram relativamente sconosciuta per l’estrazione dei dati dai profili pubblici.

Il modo in cui funziona questa API è che se aggiungi la query __a=1&__d=1 alla fine dell’URL del tuo profilo, Instagram risponde con i dati JSON sul profilo.

  Come archiviare un post su Instagram

Ad esempio, il mio nome utente è 0xanesu. Di conseguenza, se faccio una richiesta a https://instagram.com/instagram/?__a=1&__d=1, riceverò in risposta i dati JSON sul mio profilo.

Scrivere la sceneggiatura

Per effettuare la richiesta in Python, utilizzeremo il modulo richieste Python. Tuttavia, puoi anche utilizzare pycURL, urllib o qualsiasi altra libreria client che preferisci utilizzare per effettuare richieste HTTP. Per iniziare, installa il modulo request usando pip.

pip install requests

Una volta installato, apri un file in cui scrivere il tuo script e importa la funzione get dal modulo delle richieste. Inoltre, importa anche la funzione di caricamento da json. Questo verrà utilizzato per analizzare la risposta JSON.

from requests import get
from json import loads

Dopo aver importato i dati, crea una variabile che memorizzi l’URL del tuo profilo Instagram.

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

Come accennato in precedenza, per estrarre i dati di Instagram da un profilo, è necessario aggiungere i parametri di query __a=1 e __d=1. Per definirli, creiamo un oggetto dizionario con i parametri.

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

Per autorizzare le richieste che facciamo, Instagram richiede un ID sessione. Più avanti, ti mostrerò come ottenere il tuo ID di sessione. Per ora, inserisci solo un valore segnaposto che sostituirai in seguito.

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

Successivamente, definisci una funzione che verrà eseguita quando la richiesta avrà esito positivo.

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

La funzione che ho definito prenderà l’oggetto risposta, estrarrà il JSON dal corpo della risposta e quindi analizzerà il JSON in un oggetto. Successivamente, estraggo solo il nome completo e la biografia del profilo.

Successivamente, definire la funzione che verrà eseguita in caso di errore.

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)

Quindi chiamiamo la funzione get per effettuare la richiesta, passando l’URL, i parametri e i cookie come argomenti.

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

Quindi, infine, controlliamo il codice di stato dell’errore. Se lo stato è 200, chiamiamo la funzione on_success. Altrimenti chiamiamo semplicemente la funzione on_error.

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

A questo punto abbiamo finito di scrivere il codice. Ciò che resta è ottenere il file sessionid. Per ottenere l’ID sessione, apri Google Chrome e apri Instagram sul Web. Assicurati di aver effettuato l’accesso, quindi apri Dev Tools utilizzando Ctrl + Maiusc + I o Cmd + Maiusc + I.

  Quali sono le migliori idee per le storie di compleanno su Instagram?

Con Dev Tools aperto, apri la scheda Applicazione.

Quindi fare clic sul sottomenu Cookie per visualizzare i cookie utilizzati da Instagram.

Dopodiché, copia il valore del cookie sessionid dall’elenco dei cookie che verranno elencati nel pannello Dev Tools.

Una volta copiato l’id di sessione, incollalo nello script ed esegui lo script. Nel mio caso, usando Instagram come nome utente (https://instgram.com/instagram?__a=1&__d=1), questo è l’output.

E proprio così, siamo in grado di scaricare dinamicamente i dati del profilo. Ci sono molti più dati che vengono restituiti dall’API JSON. Questo è l’output quando lo stampi tutto:

Ed è così che estrai dati e post dai profili Instagram.

Parole finali

In questo articolo, abbiamo esaminato come scaricare post e contenuti multimediali utilizzando Instaloader. Abbiamo quindi scritto uno script personalizzato per estrarre i dati JSON del profilo che include molto di più del semplice contenuto multimediale. Se ti è piaciuto questo progetto, potresti voler dare un’occhiata al nostro post su Python Timeit per cronometrare il tuo codice.

Se sei interessato a ottenere di più dalla tua esperienza su Instagram, dai un’occhiata al nostro post su Qoob Stories: una recensione dettagliata sul downloader di Instagram.