Ist es möglich, die vollständige Follower-Liste eines Kontos mit mehr als einer Million Followern wie McDonald's abzurufen?

Ich benutze Tweepy und folge dem Code:

c = tweepy.Cursor(api.followers_ids, id = 'McDonalds')
ids = []
for page in c.pages():
     ids.append(page)

Ich versuche auch Folgendes:

for id in c.items():
    ids.append(id)

Aber ich habe immer den Fehler "Ratenlimit überschritten" erhalten und es gab nur 5000 Follower-IDs.

29
user1056824 2 Juli 2013 im 21:15

4 Antworten

Beste Antwort

Um eine Ratenbegrenzung zu vermeiden, können / sollten Sie vor der nächsten Follower-Seitenanforderung warten. Sieht hackig aus, funktioniert aber:

import time
import tweepy

auth = tweepy.OAuthHandler(..., ...)
auth.set_access_token(..., ...)

api = tweepy.API(auth)

ids = []
for page in tweepy.Cursor(api.followers_ids, screen_name="McDonalds").pages():
    ids.extend(page)
    time.sleep(60)

print len(ids)

Ich hoffe, das hilft.

42
alecxe 5 Juli 2013 im 14:05

Verwenden Sie beim Herstellen der Verbindung die Argumente zur Ratenbegrenzung. Die API kontrolliert sich selbst innerhalb des Ratenlimits.

Die Schlafpause ist nicht schlecht, ich benutze sie, um einen Menschen zu simulieren und die Aktivität über einen bestimmten Zeitraum zu verteilen, wobei die API-Rate als endgültige Kontrolle begrenzt wird.

api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True, compression=True)

Fügen Sie außerdem try / außer hinzu, um Fehler zu erfassen und zu steuern.

Beispielcode https://github.com/aspiringguru/twitterDataAnalyse/blob/master/sample_rate_limit_w_

Ich lege meine Schlüssel in eine externe Datei, um die Verwaltung zu vereinfachen.

https://github.com/aspiringguru/twitterDataAnalyse/blob/master/keys.py

19
Erik 24 Okt. 2016 im 16:48

Die Antwort von alecxe ist gut, aber niemand hat sich auf die Dokumente bezogen. Die richtigen Informationen und Erklärungen zur Beantwortung der Frage finden Sie unter Twitter API-Dokumentation. Aus der Dokumentation:

Die Ergebnisse werden in Gruppen von 5.000 Benutzer-IDs angegeben, und mehrere "Ergebnisseiten" können mithilfe des Werts next_cursor in nachfolgenden Anforderungen navigiert werden.

0
irritable_phd_syndrom 9 Juli 2018 im 09:51

Ich benutze diesen Code und er funktioniert für eine große Anzahl von Followern: Es gibt zwei Funktionen, eine zum Speichern der Follower-ID nach jeder Schlafphase und eine andere zum Abrufen der Liste: Es ist ein wenig missy, aber ich hoffe, nützlich zu sein.

def save_followers_status(filename,foloowersid):
    path='//content//drive//My Drive//Colab Notebooks//twitter//'+filename
    if not (os.path.isfile(path+'_followers_status.csv')):
      with open(path+'_followers_status.csv', 'wb') as csvfile:
        filewriter = csv.writer(csvfile, delimiter=',')


    if len(foloowersid)>0:
        print("save followers status of ", filename)
        file = path + '_followers_status.csv'
        # https: // stackoverflow.com / questions / 3348460 / csv - file - written -with-python - has - blank - lines - between - each - row
        with open(file, mode='a', newline='') as csv_file:
            writer = csv.writer(csv_file, delimiter=',')
            for row in foloowersid:
                writer.writerow(np.array(row))
            csv_file.closed

def get_followers_id(person):
    foloowersid = []
    count=0

    influencer=api.get_user( screen_name=person)
    influencer_id=influencer.id
    number_of_followers=influencer.followers_count
    print("number of followers count : ",number_of_followers,'\n','user id : ',influencer_id)
    status = tweepy.Cursor(api.followers_ids, screen_name=person, tweet_mode="extended").items()
    for i in range(0,number_of_followers):
        try:
            user=next(status)
            foloowersid.append([user])
            count += 1
        except tweepy.TweepError:
            print('error limite of twiter sleep for 15 min')
            timestamp = time.strftime("%d.%m.%Y %H:%M:%S", time.localtime())
            print(timestamp)
            if len(foloowersid)>0 :
                print('the number get until this time :', count,'all folloers count is : ',number_of_followers)
                foloowersid = np.array(str(foloowersid))
                save_followers_status(person, foloowersid)
                foloowersid = []
            time.sleep(15*60)
            next(status)
        except :
            print('end of foloowers ', count, 'all followers count is : ', number_of_followers)
            foloowersid = np.array(str(foloowersid))
            save_followers_status(person, foloowersid)      
            foloowersid = []
    save_followers_status(person, foloowersid)
    # foloowersid = np.array(map(str,foloowersid))
    return foloowersid
0
zana saedpanah 31 Aug. 2019 im 12:50