2017-07-03 4 views
0

J'essaye de faire un script qui télécharge une recherche de twitter dans un format .CSV, mais, là une erreur avec mon code, n'importe quelle aide ???Comment créer un fichier CSV avec une recherche simple sur tweepy?

import tweepy 
import csv 
import pandas as pd 
####input your credentials here 
consumer_key = '' 
consumer_secret = '' 
access_token = '' 
access_token_secret = '' 

auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token, access_token_secret) 
api = tweepy.API(auth,wait_on_rate_limit=True) 
#####United Airlines 
# Open/Create a file to append data 
csvFile = open('test.csv', 'a') 
#Use csv Writer 
csvWriter = csv.writer(csvFile) 

for tweet in tweepy.Cursor(api.search,q="petya",count=100, 
          since="2017-04-03").items(): 
     print ("ID:", tweet.id) 
     print ("User ID:", tweet.user.id) 
     print ("Text:", tweet.text) 
     print ("Created:", tweet.created_at) 
     print ("Geo:", tweet.geo) 
     print ("Contributors:", tweet.contributors) 
     print ("Coordinates:", tweet.coordinates) 
     print ("Favorited:", tweet.favorited) 
     print ("In reply to screen name:", tweet.in_reply_to_screen_name) 
     print ("In reply to status ID:", tweet.in_reply_to_status_id) 
     print ("In reply to status ID str:", tweet.in_reply_to_status_id_str) 
     print ("In reply to user ID:", tweet.in_reply_to_user_id) 
     print ("In reply to user ID str:", tweet.in_reply_to_user_id_str) 
     print ("Place:", tweet.place) 
     print ("Retweeted:", tweet.retweeted) 
     print ("Retweet count:", tweet.retweet_count) 
     print ("Source:", tweet.source) 
     print ("Truncated:", tweet.truncated) 

    # Write a row to the CSV file. I use encode UTF-8 
    csvWriter.writerow([tweet.created_at, tweet.user.id, tweet.id, tweet.geo, tweet.text, tweet.contributors, tweet.favorited, tweet.source, tweet.retweeted, tweet.in_reply_to_screen_name, eet.in_reply_to_status_id_str('utf-8')]) 
    print tweet.created_at, tweet.user.id, tweet.id, tweet.geo, tweet.text, tweet.contributors, tweet.favorited, tweet.source, tweet.retweeted, tweet.in_reply_to_screen_name, eet.in_reply_to_status_id_str 
csvFile.close() 

Je pense que le problème est dans la dernière partie où le csvWriter est, peut-être que je mets au texte beaucoup en une ligne? Comme je l'ai déjà dit, je suis nouveau et j'ai besoin de beaucoup d'aide.

+0

Quelle erreur avez-vous eu? – phd

Répondre

0

Je pense que la solution la plus simple utilise des pandas (ce qui, intéressant, vous avez importé mais n'a pas utilisé).

Une solution de travail peut ressembler à ceci:

import tweepy 
import pandas as pd 
consumer_key = '' 
consumer_secret = '' 
access_token = '' 
access_token_secret = '' 

auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token, access_token_secret) 
api = tweepy.API(auth,wait_on_rate_limit=True) 

# create list to append tweets to 
tweets = [] 

# append all tweet data to list 
for tweet in tweepy.Cursor(api.search,q="petya",count=100, 
         since="2017-04-03").items(): 
    tweets.append(tweet) 

# convert 'tweets' list to pandas.DataFrame 
tweets_df = pd.DataFrame(vars(tweets[i]) for i in range(len(tweets))) 

# define file path (string) to save csv file to 
FILE_PATH = </path/to/file.csv> 

# use pandas to save dataframe to csv 
tweets_df.to_csv(FILE_PATH) 

Et boum, vous avez terminé!

Notez que si vous souhaitez uniquement sélectionner un ensemble de tweets, vous pouvez simplement créer une liste, puis la sous-ensemble de la base de données.

par exemple. (Après l'étape où vous convertissez les tweets à un pandas.DataFrame):

# define attributes you want 
tweet_atts = [ 
'text', 'created_at', 'favorite_count', 
'lang', 'retweet_count', 'source', 
'in_reply_to_user_id_str', 'retweeted', 
'id' 
] 

# subset dataframe 
tweets_df = tweets_df[tweets_atts] 

# save resulting df to csv 
tweets_df.to_csv(FILE_PATH) 

Ne hésitez pas à répondre si vous avez besoin d'aide!

+0

qui le résolvent merci !!! –

+0

Génial! Pourriez-vous accepter la réponse, s'il vous plaît? –