2015-06-02 51 views
0

請幫忙解決這個錯誤。我試圖從Twitter獲取推文並將其寫入一個csv文件。python 3 tweepy csv編碼

#!/usr/bin/env python 
# encoding: utf-8 

import tweepy #https://github.com/tweepy/tweepy 
import csv 
import codecs 



#consumer key, consumer secret, access token, access secret. 
-- 
-- 
-- 
-- 


def get_all_tweets(screen_name): 
    #Twitter only allows access to a users most recent 3240 tweets with this method 

    #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 codecs.open('%s_tweets.csv' % screen_name, 'wb') as f: 

     writer = csv.writer(f) 
     writer.writerow([bytes(id,'utf-8'),bytes(created_at,'utf-8'),bytes(text,'utf-8')]) 
     writer.writerows(outtweets) 

    pass 


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

錯誤

越來越鳴叫之前529619651269894144 ... 3個鳴叫529619651269894144 之前到目前爲止

Traceback (most recent call last): 
    File "C:\Users\PraveenMS\Desktop\tweepy-3.3.0\examples\importtweepy.py", line 67, in <module> 
    get_all_tweets("gokul7071") 
    File "C:\Users\PraveenMS\Desktop\tweepy-3.3.0\examples\importtweepy.py", line 59, in get_all_tweets 
    writer.writerow([bytes(id,'utf-8'),bytes(created_at,'utf-8'),bytes(text,'utf-8')]) 
TypeError: encoding or errors without a string argument 

越來越鳴叫下載... 3個鳴叫下載到目前爲止

Traceback (most recent call last): 
    File "C:\Users\PraveenMS\Desktop\tweepy-3.3.0\examples\importtweepy.py", line 67, in <module> 
    get_all_tweets("gokul7071") 
    File "C:\Users\PraveenMS\Desktop\tweepy-3.3.0\examples\importtweepy.py", line 59, in get_all_tweets 
    writer.writerow(["id","created_at","text"]) 
TypeError: 'str' does not support the buffer interface 
+0

#write的CSV 開放( '%s_tweets.csv' %SCREEN_NAME, 'WB')爲f: 作家= csv.writer(F) = a_new進行[元組(圖(str,i))for out in outtw ees] writer.writerow(str.encode(「id」),str.encode(「created_at」),str.encode(「text」),str.encode(「media_url」) writer.writerows(str.encode (a_new)) –

+0

嘗試了上面的代碼。在使用編碼功能將str列表轉換爲字節時,我遇到了錯誤。 –

回答

0

寫數據寫行總是很困難,你需要遵循各種編碼特性,還有其他更簡單的方法來收集推文並將其存儲在csv文件中......如果你可以告訴你想要存儲什麼確切的內容......可能更容易給出適當的解決方案..

from tweepy import Stream 
from tweepy import OAuthHandler 
from tweepy.streaming import StreamListener 
import time 

ckey = '######' 
csecret = '#####' 
atoken = '####' 
asecret = '#####' 

class listener(StreamListener): 

    def on_data(self, data): 
     try: 
      print data 
      saveFile = open('Filename.csv','a') 
      saveFile.write(data) 
      saveFile.write('\n') 
      saveFile.close() 
      return True 
     except BaseException, e: 
      print 'failed ondata',str(e) 
      time.sleep(5) 

    def on_error(self, status): 
     print status 


auth = OAuthHandler(ckey, csecret) 
auth.set_access_token(atoken, asecret) 
twitterStream = Stream(auth, listener()) 
twitterStream.filter(track=["Obama"],languages='en') 

這是如何流有關的術語「奧巴馬」的鳴叫樣品例如......它創建一個名爲Filename.csv文件...我希望這有助於...你的問題是不是描述你想要什麼

+0

我想獲取用戶的所有推文並保存在csv中。請幫助我實現它 –

+0

好的...這對我來說很好,它收集所有推文並將其存儲在CSV中檢查此... https://gist.github.com/yanofsky/5436496#file-tweet_dumper-py -L36 – Sammer

+0

你可以使用上面的代碼來獲取「@xxxxx」的所有推文嗎? –