2017-10-01 10 views
0

J'essaie de récupérer les tweets de chronologie d'un utilisateur en utilisant tweepy (Python 3.6). Maintenant, j'ai trouvé un code avec lequel je peux le faire et les enregistrer sous forme CVS. Cela fonctionne sans problèmes lors de la récupération des tweets anglais, mais les tweets écrits en arabe sont affichés de cette façon: "b '\ xd9 \ x82 \ xd8 \ xaa \ xd8 \ xa7 \ xd9 \ x84 \ x ...". J'ai parcouru plusieurs forums et j'ai vu ce problème être soulevé plusieurs fois, mais je n'ai pas été capable de trouver une solution. J'ai pensé que ça devait avoir quelque chose à voir avec l'encodage utf-8, mais je ne sais pas comment manipuler le code. Quelqu'un a une suggestion? MERCI!Enregistrement de tweets arabes à partir de tweepy dans CVS

ceci est mon code:

>>> import tweepy 
>>> import csv 
>>> consumer_key = "..." 
>>> consumer_secret = "..." 
>>> access_key = "..." 
>>> access_secret = "..." 
>>> def get_all_tweets(screen_name): 

#authorize twitter, initialize tweepy 
auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_key, access_secret) 
api = tweepy.API(auth) 

#initialize a list to hold all the tweepy Tweets 
alltweets = [] 

#make initial request for most recent tweets (200 is the maximum allowed count) 
new_tweets = api.user_timeline(screen_name = screen_name,count=200) 

#save most recent tweets 
alltweets.extend(new_tweets) 

#save the id of the oldest tweet less one 
oldest = alltweets[-1].id - 1 

#keep grabbing tweets until there are no tweets left to grab 
while len(new_tweets) > 0: 
    print("getting tweets before %s" % (oldest)) 

    #all subsiquent requests use the max_id param to prevent duplicates 
    new_tweets = api.user_timeline(screen_name = screen_name,count=200,max_id=oldest) 

    #save most recent tweets 
    alltweets.extend(new_tweets) 

    #update the id of the oldest tweet less one 
    oldest = alltweets[-1].id - 1 

    print("...%s tweets downloaded so far" % (len(alltweets))) 

#transform the tweepy tweets into a 2D array that will populate the csv 
outtweets = [[tweet.id_str, tweet.created_at, tweet.text.encode("utf-8")] for tweet in alltweets] 

#write the csv 
with open('%s_tweets.csv' % screen_name, 'w') as f: 
    writer = csv.writer(f) 
    writer.writerow(["id","created_at","text"]) 
    writer.writerows(outtweets) 

pass 

>>> if __name__ == '__main__': 
#pass in the username of the account you want to download 
get_all_tweets("#username") 

Répondre

1

3.x Python, il n'y a pas besoin de faire appel encode() lors de l'écriture d'écriture à des fichiers comme le système de commande open() maintenant par défaut en mode texte (en Python 2.x, vous pouvez utiliser io.open())

Remplacez tweet.text.encode("utf-8") par tweet.text.

Comme Python 3 utilise vos paramètres régionaux pour travailler ce que l'encodage de fichier à utiliser lorsque vous ouvrez un fichier en mode texte, il est plus sûr de changer votre code open() à:

with open('%s_tweets.csv' % screen_name, 'w', encoding='utf-8') as f: 

Maintenant, Python encoder automatiquement les chaînes à UTF-8 comme il écrit le fichier.

+0

Salut! merci beaucoup pour cette clarification. Malheureusement, maintenant, quand j'ouvre le fichier CSV, les caractères arabes apparaissent comme: بس ØØØØد¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ –

+0

Qu'est-ce que vous utilisez pour ouvrir le fichier CSV? –

+0

Oh attends. Bonne question! J'utilisais Excel, mais je me suis rendu compte que ça fonctionnait bien avec TextEdit! Incroyable, merci! Avez-vous par hasard savoir pourquoi cela se produit avec Excel et comment il peut être surmonté? –