ich die For-Schleife verfolgt haben, die die Anhänger für eine Reihe von Benutzern packt IDs Tweepy
:mit Anschluss Umgang Pause in For-Schleife, falsches Verhalten
def download_followers(user, api):
all_followers = []
try:
for page in tweepy.Cursor(api.followers_ids, screen_name=user).pages():
all_followers.extend(map(str, page))
return all_followers
except tweepy.TweepError:
print('Could not access user {}. Skipping...'.format(user))
Die Funktion auf folgende Weise aufgerufen:
for username in lookup_users:
user_followers = download_followers(username, main_api)
if user_followers:
new_followers = pd.DataFrame({
"Handles": username,
"Follower_ID": user_followers,
"Start_Date": today})
new_followers_df = new_followers_df.append(new_followers)
print('Finished outputting: {} at {}'.format(username, datetime.now().strftime('%Y/%m/%d %H:%M:%S')))
Je nach der Menge der Anhänger jeder user
haben könnte, Twitter's API
haben könnte zweimal oder dreimal aufgerufen werden alle user's followers
zu greifen.
Dementsprechend gibt es einen Rest von 15 Minuten, bevor ein weiterer Anruf an die API erfolgt. Dies wird durch Hinzufügen der folgenden Parameter auf Tweepy
behandelt:
main_api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
Das Ergebnis etwa wie folgt lautet:
Rate limit reached. Sleeping for: 895
Rate limit reached. Sleeping for: 895
Finished outputting: @barackobama at 2017/07/01 10:36:07
Wobei die API
in diesem Fall zweimal seine Grenze erreicht. Warten Sie 15 Minuten jedes Mal, bevor Sie alle Anhänger @barackobama
ergreifen.
Manchmal schlägt jedoch die for loop
fehl. Ausdrucken der Nachricht:
'Could not access user @barackobama. Skipping...'
Dies wird vor allem durch entweder ein Verbindungsproblem, das twitter api nicht die richtige Anfrage gesendet wird, oder ein Konto mit in der Lage, eine Menge von Anhängern und Tweepy Paket nicht damit umgehen entsprechend.
Um für einen möglichen Verbindungsfehler Konto Ich hat versucht, die api in einem While True
Argumente wie in der folgenden Art und Weise Verpackung:
def download_followers(user, api):
all_followers = []
while True:
try:
for page in tweepy.Cursor(api.followers_ids, screen_name=user).pages():
all_followers.extend(map(str, page))
return all_followers
except tweepy.TweepError:
print('Could not access user {}. Trying Again...'.format(user))
continue
break
jedoch durch Umwickeln der Funktion auf diese Weise, die for-Schleife richtig funktionieren nicht. Iterating
über jeden user
nur einmal, nicht alle seine Anhänger zu ergreifen, und weiter zum nächsten user
in der `lookup_user Liste.
Zum Beispiel instead
von der folgenden Art und Weise verhalten:
Rate limit reached. Sleeping for: 895
'Could not access user @barackobama. Trying again...'
Rate limit reached. Sleeping for: 895
Finished outputting: @barackobama at 2017/07/01 10:36:07
Rate limit reached. Sleeping for: 895
Rate limit reached. Sleeping for: 895
Rate limit reached. Sleeping for: 895
Finished outputting: @donaldtrump at 2017/07/01 10:36:07
Es wirkt auf folgende Weise:
Finished outputting: @barackobama at 2017/07/01 10:36:07
Finished outputting: @donaldtrump at 2017/07/01 10:36:07
Finished outputting: @georgebush at 2017/07/01 10:36:07
Rate limit reached. Sleeping for: 895
Finished outputting: @richardnixon at 2017/07/01 10:41:08
Daher Iterieren über jeden Benutzer nur einmal.
Gibt es etwas, was ich falsch mache?