【问题标题】:Transferring Twitter Tweets to a txt file将 Twitter 推文传输到 txt 文件
【发布时间】:2015-04-19 08:42:39
【问题描述】:
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()

我打算找到所有包含关键字猫的推特推文/转发,确实如此。但是,它还应该编写一个包含所有推文的 txt 文件,但它没有。谁能告诉我我需要做什么来修复它。

编辑:我使用了你们编写的代码,但它没有返回所有推文。它打印出来像 5 或 6 然后是错误

RuntimeError: No active exception to reraise

出现,我不知道为什么。为什么会发生这种情况,因为我知道它不应该发生。

【问题讨论】:

    标签: python api twitter tweepy tweetstream


    【解决方案1】:

    我在一个项目中完成了这项工作,我的方法涉及更改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
    

    实际代码中的一些内容,而不是您重新定义 Listeneron_data 的地方。顺序:

    1. 定义要保存的文件。我们称该变量为file_path。不要忘记在此处添加 .txt 扩展名。
    2. 调用流和监听器:

      twitterStream = Stream(authorization, Listener(path=file_path))
      
    3. 使用您的过滤器。我的是坐标,我尝试使用过滤器,除非我的代码不会停止。这里适合你:

      try:
          twitterStream.filter(track=[cats])
      except Exception, e:
          print 'Failed filter() with this error:', str(e)
      

    现在,只要文本出现在流中,推文中的文本就应该写入文件中。看看你的文件大小,你应该会看到它增加了。特别是,如果您的过滤器是关于猫的。互联网爱猫。

    【讨论】:

    • except Exception, e: print 'Failed filter() with this error:', str(e)
    • 它返回一个我找不到问题所在的语法错误。抱歉放了 3 cmets,但我的键盘有问题。
    • 我使用的是 Python 3.4.2,并且在“except Exception, e:”处出现错误,提示存在语法错误。如果我把它写成 except (Exception, e): 它给出了 e 没有定义
    • 嗯...好的。我正在使用 2.7.something。我见过其他的写法。尝试将异常作为 e:
    【解决方案2】:

    我猜您提供的 sn-p 中存在轻微的缩进错误,但是我将尝试通过 2 种方法来修复您的错误,第一种是通过更正缩进,第二种是更改您的@987654321 @方法

    方法一:

    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")
    

    方法2:

    在第二种方法中,我们可以更改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
    

    【讨论】:

      【解决方案3】:

      查看以下链接,您将了解如何将推文保存到数据库以及我们的本地文件。

      https://github.com/anandstarz/Scrapee/blob/master/tweets

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-24
        • 1970-01-01
        • 2013-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-18
        相关资源
        最近更新 更多