2017-09-21 3 views
0

J'essaie de faire quelque chose d'extrêmement simple en python, mais d'une certaine manière, c'est très difficile. Tout ce que je veux faire est d'écrire un script python qui enregistre le nombre de personnes suivies par un utilisateur Instagram, et le nombre de ses abonnés. C'est tout.Comment gratter des informations de compte instagram en python

Quelqu'un peut-il me désigner un bon paquet pour faire cela? de préférence pas belle soupe car c'est trop compliqué pour ce que je veux faire. Je veux juste quelque chose comme

[user: example_user, followers:9019, following:217] 

Existe-t-il une bibliothèque python spécifique à Instagram?

Le compte que je veux supprimer est public. C'est très simple à faire pour twitter.

Toute aide est appréciée.

+3

Avez-vous vérifié pour les API Instagram? –

Répondre

0

Vous pouvez utiliser du sélénium en combinaison avec BeautifulSoup pour analyser le contenu requis. Les sélecteurs sont faciles à comprendre et précis. Plus important encore, vous pouvez utiliser ces noms de classe ou tags pour collecter les données requises qui sont visibles lors de l'inspection des éléments. Vous n'avez pas besoin de déterrer la source de la page non plus. Ici, il est:

from selenium import webdriver 
from bs4 import BeautifulSoup 

driver= webdriver.Chrome() 

driver.get('https://www.instagram.com/michaeljackson/') 
soup = BeautifulSoup(driver.page_source,"lxml") 
driver.quit() 

for item in soup.select('._o6mpc'): 
    name = item.select('._kc4z2')[0].text 
    followers= item.select('._fd86t')[1].text 
    following = item.select('._fd86t')[2].text 
    print('Name :{}\nFollowers :{}\nFollowing :{}'.format(name,followers,following)) 

Résultats:

Name :Michael Jackson 
Followers :1.6m 
Following :4 
0

sinon vous pouvez accéder aux informations de cette façon (oui, je beautifulsoup)

from bs4 import BeautifulSoup 
import urllib 

external_sites_html = 
urllib.urlopen('https://www.instagram.com/<instagramname>/?hl=en') 
soup = BeautifulSoup(external_sites_html, 'lxml') 

name = soup.find('meta', attrs={'property':'og:title'}) 
description = soup.find('meta', attrs={'property':'og:description'}) 

# name of user 
nameContent = name.get('content') 
# information about followers and following users 
descrContent = description.get('content') 

à partir que les variables que vous pouvez extraire les informations dont vous avez besoin. mais les informations sur les abonnés seront inexactes si elles ont plus d'un million de numéros. Si vous avez besoin du nombre exact, vous devrez peut-être utiliser leur API.

+0

Est-ce que "external_sites_html =" est censé assigner la ligne en dessous? Ou suis-je censé entrer quelque chose là-bas? – user53558

+0

je copie et colle cela :) son seulement utilisé dans la ligne ci-dessous. – JustOneQuestion

1

Je ne sais pas pourquoi vous souhaitez éviter d'utiliser BeautifulSoup, car il est en fait assez pratique pour des tâches comme celle-ci. Donc, quelque chose le long des lignes suivantes devrait faire le travail:

import requests 
from bs4 import BeautifulSoup 

html = requests.get('https://www.instagram.com/cristiano/') # input URL here 
soup = BeautifulSoup(html.text, 'lxml') 

data = soup.find_all('meta', attrs={'property':'og:description'}) 
text = data[0].get('content').split() 

user = '%s %s %s' % (text[-3], text[-2], text[-1]) 
followers = text[0] 
following = text[2] 

print('User:', user) 
print('Followers:', followers) 
print('Following:', following) 

... Sortie:

utilisateur: Cristiano Ronaldo (@cristiano)

Abonnés: 111.5m

Abonnements: 387

Bien sûr, vous devrez faire quelques calculs ations pour obtenir un nombre réel (mais tronqué) dans les cas où l'utilisateur a plus de 1 m suiveurs (ou suit plus de 1 m utilisateurs), ce qui ne devrait pas être trop difficile.