Проблема : перетаскивание временных шкал нескольких пользователей в твиттер для сохранения в виде DataFrame.
Вот решение, которое отлично работает для одного пользователя за раз:
import tweepy
import pandas as pd
import numpy as np
ACCESS_TOKEN = ""
ACCESS_TOKEN_SECRET = ""
CONSUMER_KEY = ""
CONSUMER_SECRET = ""
# OAuth process, using the keys and tokens
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
# Creation of the actual interface, using authentication
api = tweepy.API(auth, wait_on_rate_limit=True)
# Running only on handle returns a dataframe
tweets = api.user_timeline(screen_name='pycon', count=10)
print("Number of tweets extracted: {}.\n".format(len(tweets)))
data = pd.DataFrame(data=[tweet.text for tweet in tweets], columns= ['Tweets'])
data['len'] = np.array([len(tweet.text) for tweet in tweets])
data['ID'] = np.array([tweet.id for tweet in tweets])
data['Date'] = np.array([tweet.created_at for tweet in tweets])
data['Source'] = np.array([tweet.source for tweet in tweets])
data['Likes'] = np.array([tweet.favorite_count for tweet in tweets])
data['RTs'] = np.array([tweet.retweet_count for tweet in tweets])
print(data)
Вышеописанное прекрасно работает и вернет 10 * последних твитов пользователя pycon
в DataFrame. Следующим шагом является добавление нескольких дескрипторов для запроса. Вот код для выполнения одной и той же вещи с несколькими дескрипторами:
#Added list of handles
handles = ['pycon', 'gvanrossum']
#Added Empty DF to fill
test = []
#Added loop
for handle in handles:
tweets = api.user_timeline(screen_name=handle, count=10)
print("Number of tweets extracted: {}.\n".format(len(tweets)))
data = pd.DataFrame(data=[tweet.text for tweet in tweets], columns=['Tweets'])
data['len'] = np.array([len(tweet.text) for tweet in tweets])
data['ID'] = np.array([tweet.id for tweet in tweets])
data['Date'] = np.array([tweet.created_at for tweet in tweets])
data['Source'] = np.array([tweet.source for tweet in tweets])
data['Likes'] = np.array([tweet.favorite_count for tweet in tweets])
data['RTs'] = np.array([tweet.retweet_count for tweet in tweets])
test.append(data)
print(test)
Запуск этого даст два выхода. data
будет DataFrame с 10 самыми последними твитами gvanrossum
(будучи вторым дескриптором в списке дескрипторов, это имеет смысл). Второй вывод будет test
, который является списком. Интересно, что test
имеет все 20 твитов из pycon
и gvansossum
, но в виде списка. Цикл работает, но он не сохраняется как DataFrame.
Вопрос : Как сохранить этот цикл между несколькими дескрипторами как DataFrame?