Savoir son nombre de followers instagram
RésoluBonjour,
Je cherche à m'inspirer d'un script python pour connaitre son nombre de followers sur Instagram. Merci des exemples.
“Impose ta chance, serre ton bonheur et va vers ton risque. À te regarder, ils s’habitueront.” René Char
5 réponses
L'objectif est d'obtenir le nombre de followers sur Instagram à partir d'un script Python, afin d'automatiser la récupération sans passer par l'interface web manuelle quotidienne. Des solutions fiables passent par l'API officielle Graph d'Instagram via un compte Creator ou Business et un token d'accès, ou par des bibliothèques comme Instaloader qui lisent les informations des profils après authentification. En revanche, le scraping direct de pages est fragile et peut être contraire aux conditions d'utilisation, et certaines approches nécessitent une gestion d'authentification comme le login, la 2FA ou des tokens d'application. D'autres éléments à considérer incluent la lecture de la documentation API et la vérification de la disponibilité des métriques dans les réponses JSON, ainsi que les limitations liées à l'accès.
-
Bonjour,
En premier lieu, le compte Instagram doit être "Creator" ou "Business" pour disposer d'une clé API.
Ensuite, avant de rédiger le script, il convient de s'imprégner de la documentation API :-)
Cette doc en main, il suffit de rédiger un script Python tapant une requête GET sur l'API Instagram avec les bons paramètres puis lire le contenu du JSON renvoyé.
import requests TOKEN_API = "TOKEN_API" USER = "ID_USER_INSTAGRAM" URL_API = f"https://graph.facebook.com/v21.0/{USER}/insights" parametres_requete = { "metric": "follower_count", "period": "lifetime", "access_token": TOKEN_API } reponse = requests.get(URL_API, params=parametres_requete) if reponse.status_code == 200: try: body = reponse.json() if "data" in body and body["data"]: nb_followers = body["data"][0].get("values", [{}])[0].get("value", "Non disponible") print(f"Nombre de followers : {nb_followers}") else: print("Soit aucune donnée n'est disponible, soit le compte a moins de 100 followers.") except ValueError as exception: print(f"Impossible de lire le contenu du JSON, erreur : {exception}") else: print(f"Erreur {reponse.status_code} rencontrée.")Tenez au jus !
-
import instaloader # Créer une instance d'Instaloader L = instaloader.Instaloader() # Remplacez 'votre_nom_utilisateur' par le nom d'utilisateur du compte Instagram username = 'plume_quentique_du_mascaret' # Charger le profil profile = instaloader.Profile.from_username(L.context, username) # Afficher le nombre de followers print(f"Le compte {username} a {profile.followers} followers.")Avec ce script ça fonctionne, tant mieux, merci pour ton aide !
-
Tant mieux si ça convient, marque le sujet en résolu
Si tu trouves comment régler l'erreur du message 43, reviens poster ici pour les suivants
-
@luckydu43
J'ai remarqué que ce script, fonctionnel, est stocké en :
C :\Users\quent\onedrive\desktop\Python
Les autres codes sont :
C:\Users\quent\PycharmProjects\pythonProject
Je ne sais pas si cela à un lien de cause à effet ?
-
@quentin2121
Intéressant.
Python est exécuté où il est installé mais les chemins relatifs sont liés au répertoire courant.
Quand tu fais pydevp.py --file, ton script est chargé en mémoire mais Python utilise toujours le répertoire courant pour accéder aux fichiers.
Ces deux répertoires n'ont peut-être pas les mêmes droits d'accès.Pour vérifier si tu te le sens, ajoute ça en haut du script :
import os import sys print("Interpréteur Python : ", sys.executable) print("Répertoire courant où le script est exécuté : ", os.getcwd()) print("Droits d'accès et écriture dans le répertoire courant : ", os.access(os.getcwd(), os.W_OK)) print("Liste des fichiers présents dans le répertoire courant : ", os.listdir(os.getcwd())) -
@luckydu43
One drive est apparemment comme un dossier sur C. J'ai stoppé la sauvegarde automatique vers One drive, mon quota gratuit est rempli. Peut-être ai-je fait une fausse manipulation en créant ce script ? Quand je retourne sur le répertoire de PyCharm, que je crée un nouveau script, il est bien enregistré dans son répertoire avec lequel est installé PyCharm. Je ne teste pas plus.
-
-
Mon compte insta n'est pas professionnel ou creator. Je me connecte par un navigateur a partir du pc, comme sur smartphone.
Est que ce code sur le lien suivant ferait l'affaire :
https://openclassrooms.com/forum/sujet/compteur-dabonne-sur-insta
-
-
@luckydu43
from bs4 import BeautifulSoup import requests import time while(True): URL = "https://www.instagram.com/systorm.os_off/" def parse_data(s): data = {} s = s.split("-")[0] s = s.split(" ") data['Followers'] = s[0] #data['Following'] = s[2] #data['Posts'] = s[4] return data def scrape_data(username): try: r = requests.get(URL.format(username)) s = BeautifulSoup(r.text, "html.parser") meta = s.find("meta", property ="og:description") return parse_data(meta.attrs['content']) except AttributeError : pass if __name__=="__main__": username = "Systorm-OS Officiel" data = scrape_data(username) print(data) time.sleep(50)j'ai comme réponse "none", où est le problème ?
-
@quentin2121
A la limite
- si y avait un seul truc à corriger,
- vu que c'est déjà posté,
j'aurais mis mais là y a vraiment trop à faire.
Le script présent sur le topic de forum où tu l'as récupéré date de bien avant mai 2022 et la 4ème réponse était déjà bien explicite :
"C'est généralement une très mauvaise idée de faire des requêtes de ce genre à des sites tels que Google/Facebook/etc. Tu peux essayer de regarder leur API. Eventuellement, tu peux aussi passer par
https://www.instagram.com/###USER_NAME###/?__a=1qui permet d'obtenir un JSON avec les informations que tu souhaites mais pas sûr que tu ne te fasses pas blacklister en l'utilisant trop souvent"
Aparté, sur Powershell la commande
Invoke-WebRequest -Uri "https://www.instagram.com/blitzstream_officiel/?__a=1" -Method Getne renvoie plus le nombre d'abonnés mais elle répond. Tu peux déjà te faire la main sur ce genre de commandes.
Voici le site d'origine d'où provient le script que tu as récupéré. En bas, il mentionne être une traduction de ce site où le post date du 21 juillet 2021. Tente avec cette version, on peut être surpris. Autrement, je te laisse voir les liens présents au post #1 pour une approche plus pérenne et formatrice.
Crois-bien qu'au premier refactor de la page Instagram tu vas abandonner le projet. Une MAJ du script suite à évolution d'API c'est 30min en lisant la doc.
-
@luckydu43
Je vais abandonner le projet, c'est trop compliqué pour mon niveau de script. Merci de ton aide.
Je vais tenter par acquit de conscience ceci :
https://acervolima.com/obter-detalhes-do-perfil-do-instagram-usando-python/
-
@quentin2121
Tiens au jus mais tu te bases là sur le lien de "Voici le site d'origine" où le scraping se base sur la page Instagram en 2021. Le Web scraping est régulièrement combattu à juste titre par les grands sites pour éviter des requêtes automatisées en masse ou du vol de contenu, entre autres.
C'est une des raisons pourquoi je ne peux pas aider sur cette piste sur un forum public : ton script lancera peut-être une requête par jour quand un lecteur du forum, 3 ans après, lancera une requête chaque milliseconde.
Je ne sais pas quel était le besoin mais si c'est pour ton compte dans un usage pro/semi-pro, monter de version offre d'autres possibilités qu'un accès API :-)
Et à titre perso tu apprendras plus avec une API où cette connaissance est réplicable.
-
-
Modérateur
Bonjour,
J'omets tous les aspects liés aux clés et sur le scraping car luckydu43 a selon moi déjà dit tout ce qu'il y avait dire.
As-tu regardé le paquet instaloader et plus particulièrement la fonction get_followers ?
from instaloader import Instaloader USER = "ton_login_instagram" L = Instaloader() # Optionally, login or load session # L.login(USER, PASSWORD) # (login) L.interactive_login(USER) # (ask password on terminal) # L.load_session_from_file(USER) # (load session created w/ # # `instaloader -l USERNAME`) profile = Profile.from_username(L.context, USER) followers = profile.get_followers() print(followers) print(f"{len(followers)} followers")Bonne chance
-
C:\Users\quent\AppData\Local\Programs\Python\Python311\python.exe C:\Users\quent\PycharmProjects\pythonProject\instagram.py
File "C:\Users\quent\PycharmProjects\pythonProject\instagram.py", line 14
print(f"{len(followers) followers")
^
SyntaxError: f-string: expecting '}Merci mamiemando,
En 3 il faut indiquer son login insta ou laisser comme tu as indiqué ?
-
@quentin2121
Bonjour
, c'est une erreur de syntaxe fstring, pardonnable à mamiemando car écrit sans IDE mais un peu moins pour toi : développer n'est rien sans debugging :-)
L'erreur dit "f-string: expecting '}" donc qu'il manque une accolade (ça te dit même où, quasi) :
print(f"{len(followers)} followers")... et je pense qu'il vaut mieux que tu essaies avec ton login --'
-
-
@quentin2121
A mon avis il y a un script précédent qui tourne. Faut voir la partie "run" si y a un truc lancé dans PyCharm.
À défaut de trouver, tente un
taskkill /f -im python.exeSi ça persiste, le process porte un autre nom : parcours avec tasklist -v (mets le CMD en grand écran pour mieux voir)
-
@luckydu43
Dans Pycharm, il faut utiliser l'invite de commande CMD ou le terminal pour faire cette commande ?
-
-
Ah ah, Instagram se défend ^^
Jusque là c'est bon signe que ça réponde. La troisième fois est normale, il y a une limite aux appels de ton programme.
Tu peux utiliser une session unique pour faire tes appels, pour cela go documentation précisément le stockage de la session dans un fichier (y a 2 liens).
Rapidement je vois ça, je te laisse corriger si besoin, je suis sur autre chose ^^
L'exception c'est parce que ça peut la lever, par ex une question de droits d'accès en lecture/écriture au fichier de session généré
import instaloader login = 'plume_quentique_du_mascaret' mdp = 'mdp' session_file = f"{login}.session" # Créer une instance d'Instaloader L = instaloader.Instaloader() try: L.load_session_from_file(session_file) except FileNotFoundError: L.context.username = login L.context.password = mdp L.context.do_login(L.context.username, L.context.password) L.save_session_to_file(session_file) # Charger le profil profile = instaloader.Profile.from_username(L.context, login) # Afficher le nombre de followers print(f"Le compte {login} a {profile.followers} followers.")Tiens au jus, comme d'hab
-
C:\Users\quent\AppData\Local\Programs\Python\Python311\python.exe C:\Users\quent\PycharmProjects\pythonProject\TAGRAM.py
Traceback (most recent call last):
File "C:\Users\quent\PycharmProjects\pythonProject\TAGRAM.py", line 12, in <module>
L.load_session_from_file(session_file)
File "C:\Users\quent\AppData\Local\Programs\Python\Python311\Lib\site-packages\instaloader\instaloader.py", line 635, in load_session_from_file
with open(filename, 'rb') as sessionfile:
^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\users\\quent\\appdata\\local\\temp/.instaloader-quent/session-plume_quentique_du_mascaret.session'During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\quent\PycharmProjects\pythonProject\TAGRAM.py", line 16, in <module>
L.context.do_login(L.context.username, L.context.password)
^^^^^^^^^^^^^^^^^^
AttributeError: 'InstaloaderContext' object has no attribute 'do_login' -
@quentin2121
Il y a eu 2 levées.
La 2ème c'est un loupé de ma part en réécrivant le code, c'est login() et non do_login() , cf doc
La première c'est la FileNotFoundError attendue, là encore logique de la lever à la première exécution vu qu'il n'a pas encore stocké la session dans le fichier.
Comme j'ai dit, c'était une proposition rapide. Fallait aller plus loin qu'exécuter et attendre qu'on corrige --' Qu'avais-tu analysé de ton côté ?
Voici une propale. Sois proactif dans ton code, c'est ton projet. Tu viens littéralement de pondre une stack trace sans la lire.
import instaloader login = 'plume_quentique_du_mascaret' mdp = 'mdp' session_file = f"{login}.session" # Créer une instance d'Instaloader L = instaloader.Instaloader() try: L.load_session_from_file(session_file) except FileNotFoundError: L.context.login(login, mdp) L.save_session_to_file(session_file) # Charger le profil profile = instaloader.Profile.from_username(L.context, login) # Afficher le nombre de followers print(f"Le compte {login} a {profile.followers} followers.") -
@luckydu43
C:\Users\quent\AppData\Local\Programs\Python\Python311\python.exe C:\Users\quent\PycharmProjects\pythonProject\TAGRAM.py
Traceback (most recent call last):
File "C:\Users\quent\PycharmProjects\pythonProject\TAGRAM.py", line 12, in <module>
L.load_session_from_file(session_file)
File "C:\Users\quent\AppData\Local\Programs\Python\Python311\Lib\site-packages\instaloader\instaloader.py", line 635, in load_session_from_file
with open(filename, 'rb') as sessionfile:
^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\users\\quent\\appdata\\local\\temp/.instaloader-quent/session-plume_quentique_du_mascaret.session'During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\quent\PycharmProjects\pythonProject\TAGRAM.py", line 14, in <module>
L.context.login(login, mdp)
File "C:\Users\quent\AppData\Local\Programs\Python\Python311\Lib\site-packages\instaloader\instaloadercontext.py", line 304, in login
raise TwoFactorAuthRequiredException("Login error: two-factor authentication required.")
instaloader.exceptions.TwoFactorAuthRequiredException: Login error: two-factor authentication required. -
@quentin2121
Tu viens littéralement de pondre une stack trace sans la lire
-
@luckydu43
Je ne comprends pas les erreurs lignes 12 et 14, j'ai bien activé la double authentification sur le site Instagram.
-