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% de l'internet, selon Statista.
Cet article est un guide sur la façon de télécharger par programme Instagram Il existe deux méthodes pour extraire les données d'un profil à l'aide de Python. 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 scraping de données peut constituer une violation des conditions de service d'Instagram, et nous vous recommandons de ne télécharger que les données de votre compte.
Utilisation d'Instaloader
Instaloader est un paquetage Python pour le téléchargement des médias Instagram. Il est incroyablement facile à utiliser et permet d'extraire et de télécharger des données rapidement et facilement. Pour commencer à utiliser Instaloader, il faut d'abord l'installer à l'aide de pip :
pip install instaloader
Une fois installé, vous pouvez l'utiliser à partir de son interface en ligne de commande ou en tant que paquetage dans un script Python.
Pour l'utiliser à partir de la ligne de commande, vous utilisez l'option instaloader
(commande d'aide). Par exemple, pour afficher des informations d'aide, vous entrez la commande suivante dans votre terminal :
instaloader --help
Pour télécharger la photo de profil d'un utilisateur, vous entrez la commande avec un --profile
suivie du nom d'utilisateur. Par exemple :
instaloader --profile <USERNAME OF THE PROFILE>
Mais pour que cette commande fonctionne, vous devez d'abord vous connecter. Pour ce faire, vous devez passer l'option login de la manière suivante :
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 d'accueil vous montre toutes les 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 entrer la commande suivante :
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 posts.
Pour télécharger les messages des adeptes d'un profil, vous devez entrer la commande suivante :
instaloader --login <YOUR USERNAME> @<TARGET USERNAME>
Notez que la différence entre cette commande et la précédente est le paramètre @
avant le nom d'utilisateur cible.
Une alternative à l'utilisation de l'interface en ligne de commande d'Instaloader est de l'utiliser en tant que paquetage Python. Le paquetage est bien documenté ici.
Avec Instaloader, vous pouvez télécharger différents fichiers multimédias. Cependant, si vous souhaitez extraire des métadonnées telles que la page bio d'un utilisateur, Instaloader ne suffit pas. Avec la méthode suivante, vous écrirez un script Python pour extraire les données d'un profil d'utilisateur.
Écrire un script Python pour télécharger les données d'Instagram
Vue d'ensemble
Dans cette méthode, nous allons écrire un script simple pour télécharger des données Instagram en Python. Cette méthode repose sur l'utilisation d'une API JSON d'Instagram relativement peu connue pour extraire les données des profils publics.
Cette API fonctionne 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.
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 recevrai en réponse des données JSON sur mon profil.
L'écriture du scénario
Pour effectuer la demande en Python, nous allons utiliser le module Python requests. Cependant, vous pouvez également utiliser pycURLurllib, ou toute autre bibliothèque client que vous préférez utiliser pour effectuer des requêtes HTTP. Pour commencer, installez la bibliothèque requests
module utilisant pip
.
pip install requests
Une fois ce module installé, ouvrez un fichier dans lequel vous écrirez votre script et importez la fonction get du module requests. De plus, importez également la fonction loads du module json
. Il sera utilisé pour analyser la réponse JSON.
from requests import get
from json import loads
Une fois les données importées, créez une variable qui stocke l'URL de votre profil Instagram.
url = 'https://instagram.com/<YOUR USERNAME HERE>'
Comme indiqué précédemment, pour extraire les données Instagram d'un profil, vous devez ajouter l'option __a=1
et __d=1
les paramètres de la requête. 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 a besoin d'un identifiant de session. Plus loin, je vous montrerai comment obtenir votre identifiant de session. Pour l'instant, mettez une valeur de remplacement que vous remplacerez plus tard.
cookies = { 'sessionid': '<YOUR SESSION ID HERE>' }
Définissez ensuite une fonction qui s'exécutera lorsque la demande aura abouti.
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 prend en charge l'objet réponse, extrait le JSON du corps de la réponse et analyse ensuite le JSON en un objet. Après cela, je n'extrais que le nom complet et la biographie du profil.
Définissez ensuite la fonction qui sera exécutée 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)
Nous appelons ensuite la fonction get pour effectuer la demande, en passant l'URL, les paramètres et les cookies comme 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
fonction. Sinon, nous appelons simplement la fonction on_error
fonction.
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'à récupérer le sessionid
. Pour obtenir l'identifiant de session, ouvrez Google Chrome et Instagram on Web. Assurez-vous d'être connecté, puis ouvrez Dev Tools en utilisant Ctrl + Shift + I
ou Cmd +Shift + I
.

Lorsque Dev Tools est ouvert, ouvrez l'onglet Application.

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

Ensuite, copiez la valeur de l'élément 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 le résultat.

Et c'est ainsi que nous sommes en mesure de télécharger dynamiquement des données de profil. L'API JSON renvoie bien d'autres données. Voici le résultat de l'impression de toutes ces données :

Et c'est ainsi que vous extrayez les données et les posts des profils Instagram.
Dernières paroles
Dans cet article, nous avons expliqué comment télécharger des posts et des médias à l'aide d'Instaloader. Nous avons ensuite écrit un script personnalisé pour extraire les données JSON du profil qui comprennent bien plus que le contenu des médias. Si vous avez aimé ce projet, vous voudrez peut-être consulter notre article sur le script Python Timeit pour chronométrer votre code.
Si vous souhaitez tirer le meilleur parti de votre expérience sur Instagram, consultez notre article sur les Histoires de Qoob: un avis détaillé sur le téléchargeur Instagram.