如何通过 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)
我正在使用 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)