【问题标题】:Save Streaming Twitter Data to CSV将流式 Twitter 数据保存到 CSV
【发布时间】:2014-05-01 04:50:33
【问题描述】:

我是 Python 新手,我正在尝试将流式 Twitter API 中的数据保存到 CSV 文件中。我可以成功地将内容打印到控制台,但无法保存。

我在堆栈上进行了搜索,发现了几个非常接近回答我的问题的示例,但由于我的技能非常有限,我发现没有一个非常适合我。

我打印到控制台的代码如下:

import sys
import tweepy

#pass security information to variables
consumer_key=""
consumer_secret=""
access_key = ""
access_secret = ""


#use variables to access twitter
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)

#create an object called 'customStreamListener'

class CustomStreamListener(tweepy.StreamListener):

    def on_status(self, status):
        print status.author.screen_name, status.created_at, status.text


    def on_error(self, status_code):
        print >> sys.stderr, 'Encountered error with status code:', status_code
        return True # Don't kill the stream

    def on_timeout(self):
        print >> sys.stderr, 'Timeout...'
        return True # Don't kill the stream


streamingAPI = tweepy.streaming.Stream(auth, CustomStreamListener())
streamingAPI.filter(track=['russia'])

【问题讨论】:

    标签: python csv tweepy


    【解决方案1】:

    当您说“保存”时,您是否想到了特定的格式?

    我能想到的第一个解决方案是将打印的任何内容写入文本文件:

    my_file = open("file.txt","w") 
    def on_status(self, status):
        a = status.author.screen_name 
        b = status.created_at 
        c = status.text
        my_file.write(a,b,c) 
    my_file.close()
    

    我对 Python 也有些陌生,所以这可能不是 100% 正确,但值得一试。

    【讨论】:

    • 另外,确保将“打开文件”代码行放在函数本身之外。否则,您将在每次运行该函数时清除文件中的所有文本。
    【解决方案2】:

    如果您想这样做,您需要 import csv 将其保存到文件中(正如您的问题所说,写入 csv。

    首先你必须:

    import csv
    

    然后您必须打开要写入的文件并创建写入器:

    handle=csv.writer(open('file.csv','wb'))
    

    我会改变

    def on_status(self, status):
        print status.author.screen_name, status.created_at, status.text
    

    到这样的事情:

    def on_status(self, status):
        print status.author.screen_name, status.created_at, status.text
        handle.writerow(status.author.screen_name, status.created_at, status.text)
    

    当然,您必须将句柄发送给类,或者有一些方法将句柄从主方法获取到该方法。

    我还会检查this 堆栈问题。

    您应该小心来自 Twitter 的数据,其中也可以包含逗号。看着这个question,他们解释了如何转义字符串中可能存在的任何逗号。或者当然你必须转义每个变量或至少 status.text。

    【讨论】:

    • NoSQL 数据库确实是保存 Twitter 数据 IMO 的最佳方式。如果您要使用 MongoDB 之类的东西,每条推文和随附的元数据都将是一个简单的 JSON 对象。您不必担心转义文本等,只需使用 API 创建 JSON 对象并插入到文档存储中。当然,拥有 NoSQL 数据库比简单地写入 csv 要复杂一些,但值得研究。
    【解决方案3】:

    这对我有用,但如果您在评论中遇到问题,请告诉我。

    import csv
    def on_status(self, status): 
        with open('file.txt', 'w') as f: 
            f.write('Author,Date,Text')
            writer = csv.writer(f)
            writer.writerow([status.author.screen_name, status.created_at, status.text])
    

    【讨论】:

    • 感谢您的帮助!可悲的是,您的代码引发以下错误:“AttributeError:'_csv.writer' 对象没有属性'write'”。知道问题可能是什么吗?
    • 工作得很好。感谢您的编辑。我在编码错误方面遇到了一些麻烦,所以我不得不稍微修改你的代码。将我的最终编辑放在首位
    • 我很想,但我缺乏代表。很抱歉!
    • 这对我不起作用。我最终复制了所有流式打印的文本并粘贴到文本文件中。
    • @Zane 如果你愿意,我可以帮你调试。
    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 2016-05-18
    • 2016-12-21
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 2015-03-23
    相关资源
    最近更新 更多