如何通过 tweepy 将推文导出到 txt 或 json?

How to export tweets to txt or json, by tweepy?

我正在使用 tweepy 来捕获推特数据,我想知道我是否可以将推文导出到 json、txt 或 csv 文件? 我的代码:

#coding = utf-8

import json
import tweepy
from tweepy import OAuthHandler
from tweepy import Stream
from tweepy.streaming import StreamListener

consumer_key = "my_consumer_key"
consumer_secret = "my_consumer_secret"
access_token = "my_acess_token"
access_token_secret = "my_acess_token_secret"

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

api = tweepy.API(auth)

def saida_json(tweet):
    with open('tweet.json', 'a', encoding='utf-8') as f:
        json.dump(tweet, f)

def saida_txt(tweet):
    with open('tweet.txt', 'a', encoding='utf-8') as f:
        for linha in tweet:
            f.write(tweet + '\n')

name = "usersl"
tweetCount = 20
public_tweets = api.home_timeline()
user_tweets = api.user_timeline(id=name, count=tweetCount)

for tweet in user_tweets:
    print(tweet.user.screen_name, tweet.text)
    saida_txt(tweet.text)
    saida_json(tweet)

我试过通过函数来​​实现,但每次都运行出错。在 txt 文件中,它只写了第一条推文和 json,通知 "its not serelized"。 我的错误在哪里?

如果您尝试将 tweet 写入 JSON 文件,json.dump 将尝试将其转换为 JSON 格式。这个过程称为serialization. json.dump only supports a small set of types in the default Encoder, which you can read about in the Python documentation。由于 tweeps 用来表示推文的 class 不是这些类型的一部分,因此 json 模块会引发您提到的异常。

作为解决方案,您可以序列化包含有关推文的各种数据的字典,这是一个示例:

def tweet_to_json(tweet):
    tweet_dict = {
        "text": tweet.text,
        "author_name": tweet.user.screen_name
    }
    with open('tweet.json', 'w+') as f:
        json.dump(tweet_dict, f)

请注意,对 JSON 文件使用追加模式通常不是一个好主意。您可以改用 JSON 列表。 This reply to another question 可能会帮助你。

编辑:这是保存 JSON 列表的示例:

result = []
for tweet in api.user_timeline(id=name, count=tweetCount):
    result.append({
        'text': tweet.text, 
        'author_name': tweet.user.screen_name
    })
with open('tweet.json', 'w+') as f:
    json.dump(result, f)