将 Twitter 推文传输到 txt 文件
Transferring Twitter Tweets to a txt file
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import json
from pprint import pprint
data_file = open('twitter.json')
data = json.load(data_file)
##Json file with all the ckey, csecret, atoken, and asecret
pprint(data)
#consumer key, consumer secret, access token, access secret.
ckey = data["ckey"]
csecret = data["csecret"]
atoken = data["atoken"]
asecret = data["asecret"]
class listener(StreamListener):
def on_data(self, data):
all_data = json.loads(data)
tweet = all_data["text"]
username = all_data["user"]["screen_name"]
print((username,tweet))
return True
def on_error(self, status):
print (status)
auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)
以上代码都是访问twitter的标准代码api。但是,我需要将从 twitter 获得的推文传输到 .txt 文件。我尝试使用下面的代码
twitterStream = Stream(auth, listener())
fid = open("cats based tweets.txt","w")
for tweet in twitterStream.filter(track=[cats]):
fid.write(tweet)
fid.close()
我打算找到所有包含关键字猫的推特 tweets/reposts,它的确如此。然而,它应该也写一个包含所有推文的 txt 文件,但它没有。谁能告诉我我需要做什么来修复它。
编辑:我使用了你们编写的代码,但它没有 return 所有推文。它打印出 5 或 6,然后是错误
RuntimeError: No active exception to reraise
出现了,我不知道为什么。为什么会发生这种情况,因为我知道它不应该发生。
看下面link你就会知道如何将推文保存到数据库以及我们的本地文件中。
我猜你提供的代码片段中有一个轻微的缩进错误,但是我会尝试用两种方法来修复你的错误,第一个是更正缩进,第二个是改变你的on_data
方法
方法一:
fid = open("cats based tweets.txt","w")
for tweet in twitterStream.filter(track=[cats]):
fid.write(tweet+"\n")
fid.close()
或者您可以简单地将上面的代码写成:
with open("cats based tweets.txt","w") as fid:
for tweet in twitterStream.filter(track=[cats]):
fid.write(tweet+"\n")
方法二:
在第二种方法中,我们可以更改 on_data
方法,以便当程序接收到新推文时,它会打开文件并直接写入它,但为此我们需要以追加模式打开文件, 因为以 w
可写模式打开文件会一次又一次地覆盖文件的内容。
def on_data(self, data):
all_data = json.loads(data)
tweet = all_data["text"]
username = all_data["user"]["screen_name"]
print((username,tweet))
with open("cats based tweets.txt","a") as fid:
fid.write(tweet+"\n")
return True
我在一个项目中做过这个,我的方法涉及更改 StreamListener
对象中的 on_data
方法。
我的代码如下所示:
class Listener(StreamListener):
def __init__(self, api=None, path=None):
#I don't remember exactly why I defined this.
self.api = api
#We'll need this later.
self.path = path
def on_data(self, data):
all_data = json.loads(data)
tweet = all_data["text"]
username = all_data["user"]["screen_name"]
print((username,tweet))
#Open, write and close your file.
savefile = open(file_path, 'ab')
savefile.write(tweet)
savefile.close()
return True
实际代码中的一些内容,而不是您重新定义 Listener
或 on_data
的地方。依次为:
- 定义要保存的文件。我们将该变量称为
file_path
。不要忘记在此处添加 .txt 扩展名。
调用流和监听器:
twitterStream = Stream(authorization, Listener(path=file_path))
使用你的过滤器。我的是坐标,我试了一下过滤器,除了这样我的代码就不会停止。这里是为你改编的:
try:
twitterStream.filter(track=[cats])
except Exception, e:
print 'Failed filter() with this error:', str(e)
现在,只要流中出现文本,推文中的文本就应该写入文件。查看您的文件大小,您应该会看到它增加了。特别是,如果您的过滤器是关于猫的。互联网爱猫。
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import json
from pprint import pprint
data_file = open('twitter.json')
data = json.load(data_file)
##Json file with all the ckey, csecret, atoken, and asecret
pprint(data)
#consumer key, consumer secret, access token, access secret.
ckey = data["ckey"]
csecret = data["csecret"]
atoken = data["atoken"]
asecret = data["asecret"]
class listener(StreamListener):
def on_data(self, data):
all_data = json.loads(data)
tweet = all_data["text"]
username = all_data["user"]["screen_name"]
print((username,tweet))
return True
def on_error(self, status):
print (status)
auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)
以上代码都是访问twitter的标准代码api。但是,我需要将从 twitter 获得的推文传输到 .txt 文件。我尝试使用下面的代码 twitterStream = Stream(auth, listener())
fid = open("cats based tweets.txt","w")
for tweet in twitterStream.filter(track=[cats]):
fid.write(tweet)
fid.close()
我打算找到所有包含关键字猫的推特 tweets/reposts,它的确如此。然而,它应该也写一个包含所有推文的 txt 文件,但它没有。谁能告诉我我需要做什么来修复它。
编辑:我使用了你们编写的代码,但它没有 return 所有推文。它打印出 5 或 6,然后是错误
RuntimeError: No active exception to reraise
出现了,我不知道为什么。为什么会发生这种情况,因为我知道它不应该发生。
看下面link你就会知道如何将推文保存到数据库以及我们的本地文件中。
我猜你提供的代码片段中有一个轻微的缩进错误,但是我会尝试用两种方法来修复你的错误,第一个是更正缩进,第二个是改变你的on_data
方法
方法一:
fid = open("cats based tweets.txt","w")
for tweet in twitterStream.filter(track=[cats]):
fid.write(tweet+"\n")
fid.close()
或者您可以简单地将上面的代码写成:
with open("cats based tweets.txt","w") as fid:
for tweet in twitterStream.filter(track=[cats]):
fid.write(tweet+"\n")
方法二:
在第二种方法中,我们可以更改 on_data
方法,以便当程序接收到新推文时,它会打开文件并直接写入它,但为此我们需要以追加模式打开文件, 因为以 w
可写模式打开文件会一次又一次地覆盖文件的内容。
def on_data(self, data):
all_data = json.loads(data)
tweet = all_data["text"]
username = all_data["user"]["screen_name"]
print((username,tweet))
with open("cats based tweets.txt","a") as fid:
fid.write(tweet+"\n")
return True
我在一个项目中做过这个,我的方法涉及更改 StreamListener
对象中的 on_data
方法。
我的代码如下所示:
class Listener(StreamListener):
def __init__(self, api=None, path=None):
#I don't remember exactly why I defined this.
self.api = api
#We'll need this later.
self.path = path
def on_data(self, data):
all_data = json.loads(data)
tweet = all_data["text"]
username = all_data["user"]["screen_name"]
print((username,tweet))
#Open, write and close your file.
savefile = open(file_path, 'ab')
savefile.write(tweet)
savefile.close()
return True
实际代码中的一些内容,而不是您重新定义 Listener
或 on_data
的地方。依次为:
- 定义要保存的文件。我们将该变量称为
file_path
。不要忘记在此处添加 .txt 扩展名。 调用流和监听器:
twitterStream = Stream(authorization, Listener(path=file_path))
使用你的过滤器。我的是坐标,我试了一下过滤器,除了这样我的代码就不会停止。这里是为你改编的:
try: twitterStream.filter(track=[cats]) except Exception, e: print 'Failed filter() with this error:', str(e)
现在,只要流中出现文本,推文中的文本就应该写入文件。查看您的文件大小,您应该会看到它增加了。特别是,如果您的过滤器是关于猫的。互联网爱猫。