Python 将推特流数据保存到CSV

Python 将推特流数据保存到CSV,python,csv,tweepy,Python,Csv,Tweepy,我是Python新手,我正在尝试将数据从推特流API保存到CSV文件。我可以成功地将内容打印到控制台,但无法将其保存 我在stack上做了一次搜索,发现了几个非常接近于回答我问题的示例,但由于我的技能非常有限,没有一个非常适合我 我要打印到console的代码如下: import sys import tweepy #pass security information to variables consumer_key="" consumer_secret="" access_key = ""

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

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

我要打印到console的代码如下:

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'])
当你说“保存”时,你有没有想过一种特定的格式

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

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%正确,但值得一试

如果您想这样做,您需要
导入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)
当然,您必须将句柄发送给类,或者使用一些方法从main获取句柄到该方法

我还要检查堆栈问题


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

这对我很有效,但是如果你在评论中遇到问题,请告诉我

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

此外,请确保将“打开的文件”函数本身之外的代码行。否则,每次运行函数时,您都会清除文件中的所有文本。NoSQL数据库确实是保存twitter数据的最佳方式。如果您使用MongoDB之类的工具,则每条推文和附带的元数据都将是一个简单的JSON对象。您不必担心转义文本或类似内容,只需使用API创建JSON对象并插入到文档存储中。当然,拥有NoSQL数据库比简单地写入csv要复杂一些,但值得研究。感谢您的帮助!遗憾的是,您的代码会引发以下错误:“AttributeError:'_csv.writer'对象没有属性“write””。知道问题是什么吗?很好。谢谢你的编辑。我在编码错误方面遇到了一些问题,所以我不得不稍微进一步修改你的代码。将我的最终编辑升级到API是很乐意的,但我没有代表。很抱歉!这对我不起作用。我最终复制了所有流式打印文本并粘贴到文本文件中。@Zan如果你愿意,我可以帮你调试。