【问题标题】:python 3 tweepy csv encodepython 3 tweepy csv 编码
【发布时间】:2015-08-15 19:34:07
【问题描述】:

请帮助解决错误。我正在尝试从 twitter 获取推文并将其写入 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 条推文

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

在 529619651269894144 之前获取推文 ...到目前为止已下载 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

【问题讨论】:

  • #write the csv with open('%s_tweets.csv' % screen_name, 'wb') as f: writer = csv.writer(f) a_new = [tuple(map(str, i) ) for i in outtweets] writer.writerow(str.encode("id"),str.encode("created_at"),str.encode("text"),str.encode("media_url") writer.writerows(str .encode(a_new))
  • 也试过上面的代码。使用编码函数将 str 列表转换为字节时遇到错误。

标签: python csv twitter encode


【解决方案1】:

使用 writerow 写入数据总是很困难,您需要遵循各种编码特征还有其他更简单的方法来收集推文并将其存储在 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 的文件...我希望这会有所帮助...您的问题不是关于您想要什么的描述

【讨论】:

  • 我想获取用户的所有推文并保存在 csv 中。请帮助我实现它
  • 好的...这对我来说很好,它收集所有推文并将其存储在 csv 中检查一下...gist.github.com/yanofsky/5436496#file-tweet_dumper-py-L36
  • 你能用上面的代码获取'@xxxxx'的所有推文吗?
  • 它为您提供最新的推文..我收到了特定用户的 3240 条推文
猜你喜欢
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 2012-09-25
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
相关资源
最近更新 更多