Python twitter流保存到文件

时间:2017-08-29 13:54:49

标签: python twitter save streaming

我目前正致力于一个代码来传播Twitter帖子并将它们保存到json文件中。同时,textblob确定推文的情绪。 到目前为止一切正常,但没有将所有输出保存到文件中。它目前保存推文,但不保存textblob计算的情绪分数。这是我在Python编写的第一天,我很感激每一点帮助:)

import textblob as textblob
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import json
from textblob import TextBlob

# consumer key, consumer secret, access token, access secret.
consumer_key = x
consumer_secret = x
access_token = x
access_token_secret = x


class StdOutlistener(StreamListener):
    def on_data(self, data):
        all_data = json.loads(data)
        tweet = TextBlob(all_data["text"])
        print(tweet)
        print(tweet.sentiment)

        # Open json text file to save the tweets
        With open('tweets.json', 'a') as tf:
            tf.write(data)

        return True

    def on_error(self, status):
        print(status)


auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

twitterStream = Stream(auth, StdOutlistener())
twitterStream.filter(languages=["en"], track=["Test"])

1 个答案:

答案 0 :(得分:1)

首先,您确定要使用on_data而不是on_statusthis详细说明两者之间的区别。我对tweepy不太熟悉,所以可能错了。

其次,您似乎没有正确更新有关情绪的数据。您使用tweet = TextBlob(all_data['text'])进行计算,但不会对tweet变量或all_data变量做任何进一步的计算。你想要的是all_data['sentiment'] = tweet.sentiment

最后,您最终没有正确地将数据写入文件。我假设你希望文件是JSON条目的集合而不是单个JSON文档。你正在做的是将提供的字符串data写入文件的末尾,没有新的行,而不是你可能拥有的任何更新的字典。您可能希望将all_data字典写为文件作为JSON对象。

以上几点的示例修复将是:

import textblob as textblob
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import json
from textblob import TextBlob

# consumer key, consumer secret, access token, access secret.
consumer_key = x
consumer_secret = x
access_token = x
access_token_secret = x


class StdOutlistener(StreamListener):
    def on_data(self, data):
        all_data = json.loads(data)
        tweet = TextBlob(all_data["text"])

        #Add the 'sentiment data to all_data
        all_data['sentiment'] = tweet.sentiment

        print(tweet)
        print(tweet.sentiment)

        # Open json text file to save the tweets
        With open('tweets.json', 'a') as tf:
            # Write a new line
            tf.write('\n')

            # Write the json data directly to the file
            json.dump(all_data, tf)
            # Alternatively: tf.write(json.dumps(all_data))

        return True

    def on_error(self, status):
        print(status)


auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

twitterStream = Stream(auth, StdOutlistener())
twitterStream.filter(languages=["en"], track=["Test"])