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

使用Tweepy将推文列表转DataFrame及存储JSON遇错求助

解决推文列表转DataFrame及JSON保存的问题

看起来你遇到的问题核心是拿到的searched_tweets数据类型和你预期的不一样——你以为是Twitter API返回的Tweet对象,但实际上可能已经被转换成了字典(dict),所以才会出现_json属性不存在、tweet.id取不到的错误。我给你一步步拆解解决方案:

第一步:先确认你的数据结构

先跑几行代码看看searched_tweets里的内容到底是什么类型,这是解决问题的关键:

# 打印第一条数据的类型和部分内容
print("数据类型:", type(searched_tweets[0]))
print("数据内容:", searched_tweets[0])

如果输出是<class 'dict'>,说明你拿到的是字典列表;如果是<class 'tweepy.models.Status'>(或类似Tweet对象),那就是官方API返回的对象。

第二步:修复JSON保存的write_tweets函数

原来的函数调用tweet._json是针对Tweet对象的,但如果是字典的话直接用字典本身就行。修改成兼容两种类型的版本:

import json

def write_tweets(tweets, filename):
    with open(filename, 'w', encoding='utf-8') as f:
        for tweet in tweets:
            # 兼容Tweet对象和字典两种情况
            tweet_data = tweet._json if hasattr(tweet, '_json') else tweet
            json.dump(tweet_data, f, ensure_ascii=False, indent=2)
            f.write('\n')

这样不管是对象还是字典,都能正常写入JSON文件了。

第三步:转成DataFrame的正确写法

同样要兼容两种数据类型,提取tweetID和其他字段:

import pandas as pd

# 初始化空列表准备存数据
tweet_data = []
for tweet in searched_tweets:
    # 判断是Tweet对象还是字典
    if hasattr(tweet, 'id'):
        # 处理Tweet对象
        entry = {
            'tweetID': tweet.id,
            'text': tweet.text,
            'created_at': tweet.created_at
            # 其他你需要的字段,比如user_id等,直接用tweet.xxx
        }
    elif isinstance(tweet, dict):
        # 处理字典类型
        entry = {
            'tweetID': tweet.get('id'),
            'text': tweet.get('text'),
            'created_at': tweet.get('created_at')
            # 其他字段用tweet.get('键名'),避免键不存在报错
        }
    else:
        # 遇到未知类型,跳过或记录错误
        print(f"跳过未知类型的数据: {type(tweet)}")
        continue
    tweet_data.append(entry)

# 转成DataFrame
DataSet = pd.DataFrame(tweet_data)
# 查看结果
print(DataSet.head())

额外提醒

如果你是用tweepy库调用API,注意有些搜索方法返回的是迭代器,需要先转换成列表再处理:

# 比如用tweepy搜索后,先转成列表
searched_tweets = list(api.search_tweets(q="关键词"))

这样后续处理就不会有迭代器的问题。

内容的提问来源于stack exchange,提问作者A.Papa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:38:42