2016-08-08 54 views
-1

我試着從過去24小時內收集所有的微博,並把它們放在一個CSV文件試圖從過去24小時收集所有的鳴叫,並把它們放在一個CSV文件

當我這樣做,我得到

_csv.Error: iterable expected, not datetime.datetime 

爲錯誤

誰能幫告訴我如何擺脫這種錯誤,並且可能被以代碼

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_token, consumer_secret) 
auth.set_access_token(access_token, access_secret) 
api = tweepy.API(auth, wait_on_rate_limit=True) 

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

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

# save most recent tweets 
alltweets.extend(new_tweets) 

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

page = 1 
deadend = False 



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.home_timeline(screen_name=screen_name, count=20, max_id=oldest, page = page) 

     # 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))) 

     for tweet in alltweets: 

      if (datetime.datetime.now() - tweet.created_at).days < 1: 

       # 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")] 

      else: 
       deadend = True 
       return 
     if not deadend: 
      page += 1 
      time.sleep(10) 

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

print ("CSV written") 

if __name__ == '__main__': 
# pass in the username of the account you want to download 
get_all_tweets("BQ") 
作出任何其他的改進

編輯

(most recent call last): 
File "C:\Users\Barry\workspace\TwitterTest\Test1\MGo.py", line 77, in <module> 
    get_all_tweets("BQ") 
File "C:\Users\Barry\workspace\TwitterTest\Test1\MGo.py", line 70, in get_all_tweets 
writer.writerows(outtweets) 
_csv.Error: iterable expected, not datetime.datetime 

EDIT 2

for row in outtweets: 
      date_str,time_str, entries_str = row.split() 
      #print(a_date,a_time, entries) 
      a_time = datetime.strptime(time_str, "%H:%M:%S") 
      for e in entries_str.split(','): 
       # write the csv  
       with open('%s_tweetsBQ.csv' % screen_name, 'w') as f: 
        writer = csv.writer(f) 
        writer.writerow(["id", "created_at", "text"]) 
        writer.writerows(outtweets) 
       pass 
+0

請修復您的縮進併發布追蹤的**全文**。 – MattDMo

+0

縮進固定,將追溯添加到問題 – Barry

+0

使用[編輯]功能來完成我所要求的功能。不要在評論中發佈代碼或回溯,他們不可能閱讀。 – MattDMo

回答

2

outtweets永遠只包含數據的單列writer.writerows()預計行的列表,也就是一個列表的列表:

[ 
    [columns, in, row, 1], 
    [columns, in, row, 2], 
] 

要設置outtweets這樣的:

outtweets = [tweet.id_str, tweet.created_at, tweet.text.encode("utf-8")] 

這只是一個單行。要將其傳遞給writerows,需要將每行數據累積到列表中,然後將該列表傳遞給writerows

+0

謝謝,即時通訊全新的這個,你能告訴我我將如何將行放入列表? – Barry

+0

如果你有一個列表,你可以用'append'方法追加一些東西。正如'mylist = []; mylist.append(SOME_VALUE)'。甚至是'my_list.append(some_other_list)'。希望這點能讓你朝着正確的方向前進。 – larsks

+0

所以我應該在循環之前創建列表的一個實例,然後在循環的每個迭代處追加? – Barry

相關問題