Comment télécharger des données Instagram avec Python

Instagram est l’un des plus grands réseaux de médias sociaux au monde, avec environ 1,21 milliard d’utilisateurs en 2021, soit environ 28 % d’Internet, selon Statista.

Cet article est un guide sur la façon de télécharger par programmation des données Instagram à partir d’un profil à l’aide de Python selon deux méthodes. La première méthode consiste à télécharger des médias à l’aide d’Instaloader. La seconde consiste à écrire un simple script Python pour obtenir des données JSON sur le profil.

Il est important de noter que le grattage des données peut enfreindre les conditions d’utilisation d’Instagram, et nous vous recommandons de ne télécharger que les données de votre compte.

Utilisation d’Instaloader

Instaloader est un package Python permettant de télécharger des médias Instagram. Il est incroyablement facile à utiliser et rend l’extraction et le téléchargement de données rapides et faciles. Pour commencer à utiliser Instaloader, commencez par l’installer à l’aide de pip :

pip install instaloader

Une fois installé, vous pouvez l’utiliser depuis son interface de ligne de commande ou en tant que package dans un script Python.

Pour l’utiliser depuis la ligne de commande, vous utilisez la commande instaloader. Par exemple, pour afficher les informations d’aide, vous saisissez la commande suivante dans votre terminal :

instaloader --help

Pour télécharger la photo de profil d’un utilisateur, vous entrez la commande avec une balise –profile, suivie du nom d’utilisateur. Ainsi:

instaloader --profile <USERNAME OF THE PROFILE>

Mais pour que cette commande fonctionne, vous devez d’abord vous connecter. Pour ce faire, vous passez l’option de connexion ainsi :

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

Que télécharger

Avec Instaloader, vous pouvez télécharger différents médias. Cet extrait de la page de manuel vous montre toutes les différentes choses que vous pouvez télécharger :

  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.

Pour télécharger les messages d’un utilisateur particulier, vous devez saisir la commande :

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

Dans ce cas, votre nom d’utilisateur est le nom d’utilisateur de votre compte Instagram authentifié ; le nom d’utilisateur cible est le profil dont vous souhaitez télécharger les publications.

  Instagram sait-il si j'achète des abonnés ? Vont-ils bannir votre compte ?

Pour télécharger les publications des abonnés d’un profil, vous devez saisir la commande :

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

Notez que la différence entre cette commande et la précédente est le @ avant le nom d’utilisateur cible.

Une alternative à l’utilisation de l’interface de ligne de commande Instaloader consiste à l’utiliser en tant que package Python. Le paquet est bien documenté ici.

Avec Instaloader, vous pouvez télécharger différents fichiers multimédias. Cependant, si vous vouliez extraire des métadonnées telles que la page bio d’un utilisateur, Instaloader seul ne suffirait pas. Avec la méthode suivante, vous écrirez un script Python pour extraire les données d’un profil utilisateur.

Écrire un script Python pour télécharger des données Instagram

Aperçu

Dans cette méthode, nous allons écrire un script simple pour télécharger les données Instagram en Python. Cette méthode repose sur l’utilisation d’une API Instagram JSON relativement inconnue pour extraire des données de profils publics.

La façon dont cette API fonctionne est que si vous ajoutez la requête __a=1&__d=1 à la fin de l’URL de votre profil, Instagram répond avec des données JSON sur le profil.

  Comment publier sur plusieurs comptes Instagram simultanément

Par exemple, mon nom d’utilisateur est 0xanesu. Par conséquent, si je fais une demande à https://instagram.com/instagram/?__a=1&__d=1, je récupérerai des données JSON sur mon profil en réponse.

Ecrire le scénario

Pour faire la requête en Python, nous allons utiliser le module de requêtes Python. Cependant, vous pouvez également utiliser pycURL, urllib ou toute autre bibliothèque cliente que vous préférez utiliser pour effectuer des requêtes HTTP. Pour commencer, installez le module requests à l’aide de pip.

pip install requests

Une fois que cela a été installé, ouvrez un fichier pour écrire votre script et importez la fonction get du module requests. De plus, importez également la fonction de charges à partir de json. Cela sera utilisé pour analyser la réponse JSON.

from requests import get
from json import loads

Une fois que vous avez importé les données, créez une variable qui stocke l’URL de votre profil Instagram.

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

Comme mentionné précédemment, pour extraire les données Instagram d’un profil, vous devez ajouter les paramètres de requête __a=1 et __d=1. Pour les définir, nous créons un objet dictionnaire avec les paramètres.

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

Pour autoriser les demandes que nous faisons, Instagram nécessite un identifiant de session. Plus tard, je vous montrerai comment obtenir votre identifiant de session. Pour l’instant, mettez simplement une valeur d’espace réservé que vous remplacerez plus tard.

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

Ensuite, définissez une fonction qui s’exécutera lorsque la requête aboutira.

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 fonction que j’ai définie prendra l’objet de réponse, extraira le JSON du corps de la réponse, puis analysera le JSON dans un objet. Après cela, je ne fais qu’extraire le nom complet et la biographie du profil.

Ensuite, définissez la fonction qui s’exécutera en cas d’erreur.

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)

Ensuite, nous appelons la fonction get pour effectuer la requête, en transmettant l’URL, les paramètres et les cookies en tant qu’arguments.

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

Enfin, nous vérifions le code d’état de l’erreur. Si le statut est 200, nous appelons la fonction on_success. Sinon, nous appelons simplement la fonction on_error.

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

À ce stade, nous avons fini d’écrire le code. Il ne reste plus qu’à obtenir le sessionid. Pour obtenir l’identifiant de session, ouvrez votre Google Chrome et ouvrez Instagram sur le Web. Assurez-vous d’être connecté, puis ouvrez Dev Tools en utilisant Ctrl + Shift + I ou Cmd + Shift + I.

  Comment supprimer tous vos messages directs Instagram

Avec Dev Tools ouvert, ouvrez l’onglet Application.

Cliquez ensuite sur le sous-menu Cookies pour afficher les Cookies utilisés par Instagram.

Après quoi, copiez la valeur du cookie sessionid dans la liste des cookies qui seront répertoriés dans le panneau Outils de développement.

Une fois que vous avez copié l’identifiant de session, collez-le dans le script et exécutez le script. Dans mon cas, en utilisant Instagram comme nom d’utilisateur (https://instgram.com/instagram?__a=1&__d=1), voici la sortie.

Et juste comme ça, nous sommes en mesure de télécharger dynamiquement les données de profil. Il y a tellement plus de données qui sont renvoyées par l’API JSON. Voici le résultat lorsque vous imprimez tout :

Et c’est ainsi que vous extrayez les données et les publications des profils Instagram.

Derniers mots

Dans cet article, nous avons expliqué comment télécharger des publications et des médias à l’aide d’Instaloader. Nous avons ensuite écrit un script personnalisé pour extraire les données JSON du profil qui incluent bien plus que le contenu multimédia. Si vous avez aimé ce projet, vous voudrez peut-être consulter notre article sur Python Timeit to Time Your Code.

Si vous souhaitez tirer le meilleur parti de votre expérience Instagram, consultez notre article sur Qoob Stories : une revue détaillée sur le téléchargeur Instagram.