我目前正致力于一个代码来传播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"])
答案 0 :(得分:1)
首先,您确定要使用on_data
而不是on_status
,this详细说明两者之间的区别。我对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"])