Instagram s’impose comme l’une des plateformes sociales les plus importantes à l’échelle mondiale, rassemblant approximativement 1,21 milliard d’utilisateurs en 2021. Selon les données de Statista, cela représente environ 28% de l’ensemble des internautes.
Ce guide propose une exploration des méthodes permettant de récupérer des données Instagram par voie de programmation, en utilisant Python. Nous examinerons deux approches distinctes : la première consiste à télécharger du contenu multimédia grâce à l’outil Instaloader, tandis que la seconde implique l’écriture d’un script Python pour obtenir les informations de profil au format JSON.
Il est crucial de souligner que la collecte de données peut potentiellement enfreindre les conditions d’utilisation d’Instagram. Nous recommandons vivement de limiter le téléchargement aux informations de votre propre compte.
Utilisation d’Instaloader
Instaloader est un module Python conçu pour simplifier le téléchargement de contenu multimédia depuis Instagram. Il se distingue par sa facilité d’utilisation, permettant une extraction et un téléchargement de données rapides et efficaces. Pour commencer avec Instaloader, l’installation via pip est nécessaire :
pip install instaloader
Une fois installé, cet outil peut être utilisé soit via son interface en ligne de commande, soit intégré comme un module dans un script Python.
Pour une utilisation en ligne de commande, la commande principale est `instaloader`. Par exemple, pour afficher les instructions d’aide, la commande à saisir dans votre terminal est :
instaloader --help
Pour télécharger la photo de profil d’un utilisateur, il faut utiliser la commande avec l’option `–profile`, suivie du nom d’utilisateur concerné. La syntaxe est la suivante:
instaloader --profile <NOM_UTILISATEUR_DU_PROFIL>
Cependant, pour que cette commande fonctionne, une connexion préalable est nécessaire. L’option de connexion s’utilise de cette manière :
instaloader --login <VOTRE_NOM_UTILISATEUR> --profile <NOM_UTILISATEUR_DU_PROFIL>
Types de contenu téléchargeable
Instaloader permet de récupérer une grande variété de contenus. Voici un extrait de la documentation qui détaille les différents types de téléchargement possibles :
profile Télécharge un profil. Si un profil précédemment téléchargé a été renommé, Instaloader le retrouve automatiquement grâce à son identifiant unique et renomme le dossier en conséquence. @profile Télécharge tous les abonnements du profil. Nécessite la connexion (--login). Il est recommandé d'utiliser :feed plutôt que @yourself. "#hashtag" Télécharge le contenu associé à un #hashtag. %location_id Télécharge le contenu associé à une %location_id. Nécessite la connexion (--login). :feed Télécharge les publications de votre fil d'actualité. Nécessite la connexion (--login). :stories Télécharge les stories de vos abonnements. Nécessite la connexion (--login). :saved Télécharge les publications que vous avez enregistrées. Nécessite la connexion (--login). -- -shortcode Télécharge une publication spécifique avec son shortcode. filename.json[.xz] Télécharge de nouveau l'objet donné. +args.txt Lit les cibles (et options) à partir d'un fichier texte donné.
Pour télécharger les publications d’un utilisateur précis, la commande à utiliser est :
instaloader --login <VOTRE_NOM_UTILISATEUR> <NOM_UTILISATEUR_CIBLE>
Dans cette commande, votre nom d’utilisateur est celui de votre compte Instagram authentifié, et le nom d’utilisateur cible correspond au profil dont vous souhaitez télécharger les publications.
Pour récupérer les publications des abonnements d’un profil, la commande est légèrement différente :
instaloader --login <VOTRE_NOM_UTILISATEUR> @<NOM_UTILISATEUR_CIBLE>
La distinction entre ces deux commandes réside dans la présence du symbole `@` avant le nom d’utilisateur cible.
En alternative à l’interface en ligne de commande, Instaloader peut être utilisé comme un module Python, dont la documentation est disponible ici.
Bien qu’Instaloader permette le téléchargement de divers types de fichiers multimédias, il peut être limité pour l’extraction de métadonnées, telles que la biographie d’un utilisateur. La méthode suivante vous guidera dans la création d’un script Python pour extraire les données d’un profil utilisateur.
Création d’un script Python pour télécharger des données Instagram
Aperçu général
Cette approche consiste à élaborer un script simple en Python pour récupérer des données Instagram. Elle repose sur l’utilisation d’une API JSON d’Instagram, moins connue, permettant d’extraire des données à partir de profils publics.
Cette API fonctionne en ajoutant les paramètres `__a=1&__d=1` à la fin de l’URL d’un profil Instagram. En réponse, Instagram fournit les données du profil au format JSON.
Par exemple, si mon nom d’utilisateur est `0xanesu`, une requête à l’adresse `https://instagram.com/0xanesu/?__a=1&__d=1` me renverra les données JSON de mon profil.
Écriture du script
Pour réaliser cette requête en Python, nous allons utiliser le module `requests`. Il est également possible d’utiliser `pycURL`, `urllib`, ou tout autre client HTTP de votre choix. Commencez par installer le module `requests` via pip :
pip install requests
Après l’installation, ouvrez un nouveau fichier pour votre script et importez la fonction `get` du module `requests`. Importez également la fonction `loads` depuis `json`, qui servira à analyser la réponse JSON.
from requests import get from json import loads
Déclarez une variable pour stocker l’URL de votre profil Instagram :
url="https://instagram.com/<VOTRE_NOM_UTILISATEUR_ICI>"
Pour extraire les données du profil, ajoutez les paramètres `__a=1` et `__d=1`. Pour cela, créez un dictionnaire Python avec ces paramètres :
params = { '__a': 1, '__d': 1 }
Pour valider les requêtes, Instagram exige un identifiant de session. Je vous montrerai ultérieurement comment récupérer cet identifiant. Pour l’instant, utilisez une valeur temporaire que vous remplacerez plus tard.
cookies = { 'sessionid': '<VOTRE_ID_DE_SESSION_ICI>' }
Définissez ensuite une fonction à exécuter en cas de succès de la requête :
def on_success(response): profile_data_json = response.text parsed_data = loads(profile_data_json) print('Nom complet de l\'utilisateur:', parsed_data['graphql']['user']['full_name']) print('Biographie de l\'utilisateur:', parsed_data['graphql']['user']['biography'])
Cette fonction prend en argument la réponse, extrait le JSON du contenu de la réponse, le convertit en un objet Python, puis extrait et affiche le nom complet et la biographie du profil.
Définissez ensuite une fonction pour gérer les erreurs :
def on_error(response): # Afficher l'erreur en cas de problème print('Une erreur est survenue') print('Code d\'erreur:', response.status_code) print('Raison:', response.reason)
Utilisez la fonction `get` pour exécuter la requête, en y intégrant l’URL, les paramètres et les cookies :
response = get(url, params, cookies=cookies)
Enfin, vérifiez le code de statut de la réponse. Si le code est 200, appelez la fonction `on_success`, sinon, appelez la fonction `on_error`.
if response.status_code == 200: on_success(response) else: on_error(response)
À ce stade, l’écriture du code est terminée. Il reste à obtenir l’identifiant de session. Pour cela, ouvrez Google Chrome et accédez à Instagram sur le Web. Assurez-vous d’être connecté, puis ouvrez les outils de développement (Dev Tools) avec `Ctrl + Shift + I` ou `Cmd + Shift + I`.
Une fois les Dev Tools ouverts, sélectionnez l’onglet Application.
Puis, cliquez sur le sous-menu Cookies pour afficher les cookies utilisés par Instagram.
Copiez ensuite la valeur du cookie `sessionid` dans la liste des cookies affichés dans le panneau des outils de développement.
Une fois l’identifiant de session copié, collez-le dans le script et exécutez-le. En utilisant Instagram comme nom d’utilisateur (https://instagram.com/instagram?__a=1&__d=1), voici le résultat :
Ainsi, nous sommes en mesure de récupérer dynamiquement les données du profil. L’API JSON renvoie beaucoup plus d’informations. Voici ce que vous obtenez en affichant toutes les données :
Voilà comment extraire les données et les publications des profils Instagram.
Conclusion
Cet article a détaillé deux méthodes pour récupérer des données Instagram. Nous avons d’abord exploré l’utilisation d’Instaloader pour le téléchargement de publications et de médias. Ensuite, nous avons développé un script personnalisé pour extraire les données JSON des profils, incluant des informations plus complètes que les seuls contenus multimédias. Si ce projet vous a intéressé, nous vous suggérons de consulter notre article sur l’utilisation de Python Timeit pour chronométrer votre code.
Pour optimiser votre expérience sur Instagram, nous vous invitons également à lire notre article sur Qoob Stories : une analyse détaillée d’un téléchargeur Instagram.