如何将终端获取的Twitter API JSON结果保存为CSV文件
嘿,我来帮你搞定把Twitter搜索API返回的JSON转成CSV的事儿!这里有两种实用方法,你可以根据自己的习惯选:
方法1:用Python脚本自定义转换(适合需要灵活选择字段的场景)
这种方法能让你精准控制要导出的内容,比如只提取推文文本、用户名、转发数这些关键信息:
第一步,先把twurl的输出保存成JSON文件:
在终端执行这条命令,把API返回结果写入本地文件:twurl /1.1/search/tweets.json?q=I%20have%20been%20diagnosed%20with%20depression > tweets.json第二步,写一个Python脚本(比如命名为
json_to_csv.py):import json import csv # 读取保存的JSON文件 with open('tweets.json', 'r', encoding='utf-8') as json_file: tweet_data = json.load(json_file) # 定义你想要导出的字段(可以根据需求增减) desired_fields = [ '推文ID', '创建时间', '推文内容', '用户名', '用户昵称', '转发数', '点赞数' ] # 打开CSV文件准备写入 with open('tweets.csv', 'w', newline='', encoding='utf-8') as csv_file: writer = csv.DictWriter(csv_file, fieldnames=desired_fields) writer.writeheader() # 写入表头 # 遍历每条推文 for tweet in tweet_data['statuses']: # 清理推文内容里的换行符,避免CSV格式混乱 cleaned_text = tweet['text'].replace('\n', ' ').replace('\r', '') # 处理嵌套字段(比如用户信息在user对象里) row = { '推文ID': tweet['id_str'], '创建时间': tweet['created_at'], '推文内容': cleaned_text, '用户名': tweet['user']['screen_name'], '用户昵称': tweet['user']['name'], '转发数': tweet['retweet_count'], '点赞数': tweet['favorite_count'] } writer.writerow(row)第三步,运行脚本:
python json_to_csv.py执行完后,同目录下就会生成
tweets.csv文件啦。如果需要调整导出字段,直接修改desired_fields和对应的row字典内容就行。
方法2:用命令行工具快速转换(适合不需要复杂自定义的场景)
如果你习惯用终端操作,这种方法更高效,需要用到两个工具:jq(解析JSON)和csvkit(处理CSV格式)。先安装它们:
- macOS:
brew install jq csvkit - Ubuntu/Debian:
sudo apt-get install jq csvkit - Windows:用Chocolatey安装:
choco install jq csvkit
步骤如下:
先把twurl的输出保存成JSON文件(和方法1第一步一样):
twurl /1.1/search/tweets.json?q=I%20have%20been%20diagnosed%20with%20depression > tweets.json用jq提取字段并转成CSV,再用csvkit处理格式:
jq -r '.statuses[] | [.id_str, .created_at, (.text | gsub("\n"; " ")), .user.screen_name, .user.name, .retweet_count, .favorite_count] | @csv' tweets.json | csvformat -U 1 > tweets.csv
解释下这个命令:
jq部分:从statuses数组里取出每条推文,提取指定字段,把推文里的换行符替换成空格,再转成CSV格式。csvformat -U 1:把所有字段用双引号包裹,避免推文里的逗号导致CSV列错位。
如果要调整导出字段,只需要修改jq里的[]数组内容就行,比如加个.lang就能导出推文语言信息。
小提示:不管用哪种方法,都要注意推文内容里的特殊字符(换行、引号、逗号)可能影响CSV格式,上面的方法已经做了基础处理,你可以根据实际情况再调整。
内容的提问来源于stack exchange,提问作者Shideh Hm
相关产品推荐
相关产品推荐

