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

如何将抓取的推文从批量JSON转为单个JSON对象存储?

解决推文独立JSON对象保存的两种方法

嘿,这个问题我之前做推特爬虫的时候也踩过坑,其实核心就是别把所有推文的参数混到一个字典里,而是把每条推文当成单独的字典,再根据需求选择保存方式:

方式一:每条推文单独存为一个JSON文件

如果需要每条推文都有独立的文件(比如后续要单独处理某条),可以循环遍历抓取到的推文列表,给每条生成一个单独的JSON文件:

import json

# 这里替换成你实际抓取到的推文列表,每个元素是单条推文的字典
scraped_tweets = [
    {"tweet_id": "123456", "text": "今天天气不错", "username": "user1"},
    {"tweet_id": "789012", "text": "分享一个爬虫技巧", "username": "user2"}
]

# 循环保存每条推文
for index, tweet in enumerate(scraped_tweets, start=1):
    # 可以用推文ID或者索引作为文件名,避免重复
    file_name = f"tweet_{tweet['tweet_id']}.json"
    with open(file_name, "w", encoding="utf-8") as json_file:
        # dump单个推文字典到文件,确保编码和格式友好
        json.dump(tweet, json_file, ensure_ascii=False, indent=4)

这样每个文件里都是一个完整的独立JSON对象,打开后直接就是单条推文的所有数据,不会出现参数合并的问题。

方式二:所有推文作为JSON数组存到一个文件(更常用)

如果想把所有推文统一管理,但每条依然是独立的JSON对象,可以把所有推文字典放到一个列表里,然后保存为JSON数组格式:

import json

scraped_tweets = [
    {"tweet_id": "123456", "text": "今天天气不错", "username": "user1"},
    {"tweet_id": "789012", "text": "分享一个爬虫技巧", "username": "user2"}
]

# 保存为包含多个独立JSON对象的数组
with open("all_scraped_tweets.json", "w", encoding="utf-8") as json_file:
    json.dump(scraped_tweets, json_file, ensure_ascii=False, indent=4)

保存后的文件内容是类似这样的格式:

[
    {
        "tweet_id": "123456",
        "text": "今天天气不错",
        "username": "user1"
    },
    {
        "tweet_id": "789012",
        "text": "分享一个爬虫技巧",
        "username": "user2"
    }
]

加载的时候直接用json.load()就能得到推文列表,遍历列表就能拿到每条独立的JSON对象,既方便管理又不会出现参数合并覆盖的问题。

关键注意点

  • 别把所有推文的键值对合并到一个大字典里!比如如果直接all_data.update(tweet),会导致重复键(比如每个推文都有tweet_id)被最后一条覆盖,这就是你现在出现“参数合并加载”的原因。
  • 保存时用ensure_ascii=False可以保留中文、表情等非ASCII字符,indent=4让JSON格式缩进,方便阅读和调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:05:32