You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tweepy调用Twitter API返回结果转JSON遇TypeError问题求助

Tweepy调用Twitter API的数据处理问题解决

问题描述

作为Python新手,用Tweepy调用Twitter API后,返回结果是一个庞大的list类型数据,尝试转JSON失败,添加以下代码时触发报错:

searched_tweets_dict = json.loads(searched_tweets)
print(searched_tweets_dict)

报错信息:

Traceback (most recent call last):
  File "E:\Dropbox\Backup\Github\Python\Mid_Journey\Search.py", line 33, in <module>
    searched_tweets_dict = json.loads(searched_tweets)
  File "C:\Pthyon_3.10\lib\json\__init__.py", line 339, in loads
    raise TypeError(f'the JSON object must be str, bytes or bytearray, '
TypeError: the JSON object must be str, bytes or bytearray, not list

同时想找类似Node.js中map的方法,筛选出有用的数据。

原调用代码(补全缺失的tweepy导入):

import Auth_Codes
import json
import tweepy

twitter_auth_keys = {
    "consumer_key"          : Auth_Codes.consumer_key,
    "consumer_secret"       : Auth_Codes.consumer_secret,
    "access_token"          : Auth_Codes.access_token,
    "access_token_secret"   : Auth_Codes.access_token_secret
}

auth = tweepy.OAuthHandler(
    twitter_auth_keys["consumer_key"],
    twitter_auth_keys["consumer_secret"]
)

auth.set_access_token(
    twitter_auth_keys["access_token"],
    twitter_auth_keys["access_token_secret"]
)

api = tweepy.API(auth)

searched_tweets = [tweet for tweet in tweepy.Cursor(api.search_tweets,
                                                    q = "What you want to search",
                                                    lang = 'en',
                                                    result_type = 'recent',
                                                    count = 1)
                   .items(1)]
print(searched_tweets)
print(type(searched_tweets))

解决方案

1. 为什么json.loads()报错?

json.loads()的作用是把JSON格式的字符串解析成Python对象,而你传入的searched_tweets是包含TweepyStatus对象的列表,不是JSON字符串,所以触发类型错误。

要把结果转成JSON,需要先把每个Status对象转成可序列化的字典,再用json.dumps()生成JSON字符串。Tweepy的Status对象自带_json属性,直接调用就能拿到该推文的字典格式数据:

# 把单条推文转成格式化的JSON字符串
single_tweet_json = json.dumps(searched_tweets[0]._json, indent=2)
print(single_tweet_json)

# 把所有推文转成格式化的JSON字符串
all_tweets_json = json.dumps([tweet._json for tweet in searched_tweets], indent=2)
print(all_tweets_json)

2. 类似Node.js map的筛选方法

Python里可以用列表推导式(比map更常用,逻辑一致)来筛选需要的字段。比如只提取推文文本、作者用户名、发布时间:

# 筛选有用字段,生成新的字典列表
filtered_tweets = [
    {
        "推文内容": tweet.text,
        "作者用户名": tweet.author.screen_name,
        "发布时间": tweet.created_at.strftime("%Y-%m-%d %H:%M:%S")
    }
    for tweet in searched_tweets
]

# 转成带中文的格式化JSON字符串
filtered_json = json.dumps(filtered_tweets, ensure_ascii=False, indent=2)
print(filtered_json)

如果想用map函数,写法如下:

def extract_tweet_info(tweet):
    return {
        "推文内容": tweet.text,
        "作者用户名": tweet.author.screen_name,
        "发布时间": tweet.created_at.strftime("%Y-%m-%d %H:%M:%S")
    }

filtered_tweets = list(map(extract_tweet_info, searched_tweets))

补充说明

Tweepy的Status对象还有很多其他属性,比如tweet.id_str(推文ID字符串)、tweet.retweet_count(转发数)等,你可以根据需求在筛选时添加对应的字段。


内容的提问来源于stack exchange,提问作者November Falls

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 23:06:27