Python 将推特流数据保存到CSV
我是Python新手,我正在尝试将数据从推特流API保存到CSV文件。我可以成功地将内容打印到控制台,但无法将其保存 我在stack上做了一次搜索,发现了几个非常接近于回答我问题的示例,但由于我的技能非常有限,没有一个非常适合我 我要打印到console的代码如下: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 = ""
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如果你愿意,我可以帮你调试。