将推特流数据保存为CSV
我刚开始学习Python,想把从Twitter实时API获取的数据保存到CSV文件里。我可以成功地把内容打印到控制台,但就是无法保存到文件里。
我在StackOverflow上搜索过,找到了几个很接近我问题的例子,但由于我的技能有限,没找到能很容易适应我的情况的例子。
我用来打印到控制台的代码如下:
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'])
3 个回答
0
当你说“保存”时,你有没有想过具体要什么格式呢?
我想到的第一个解决办法就是把你打印的内容写到一个文本文件里:
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还不太熟悉,所以这可能不是百分之百正确,但试试看也是值得的。
1
如果你想把数据保存到文件里,就需要用到 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)
当然,你需要把文件的句柄传给类,或者有某种方法可以从主程序获取这个句柄。
我还建议你查看一下这个问题。
你要小心从Twitter获取的数据,因为里面可能会有逗号。查看这个问题,他们解释了如何处理字符串中的逗号。这样的话,你就需要对每个变量,或者至少是status.text进行处理。
2
这个对我有效,不过如果你遇到问题,可以在评论里告诉我。
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])