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

Twitter流数据拆分异常:如何仅将指定字段追加至CSV文件?

解决Twitter流脚本中普通推文无法正确提取text字段的问题

我太懂你遇到的这种糟心情况了——转推能顺顺当当提取text写入CSV,可普通推文偏偏带着一堆冗余字段混进来,肯定是因为你没区分开普通推文和转推的字段结构,或者出错时的兜底逻辑没写对!

问题根源分析

Twitter API返回的推文对象里,转推和普通推文的字段路径虽然类似,但如果你的代码只处理了转推的情况,或者在普通推文提取字段时触发了异常,就会不小心把整个推文对象(包含Id、created_at等所有属性)写入CSV。比如你可能在代码里只判断了转推的retweeted_status字段,普通推文的提取逻辑要么没写,要么出错后直接把整个对象丢进了CSV。

改进后的代码解决方案

下面是调整后的完整脚本,专门针对普通推文和转推做了字段提取处理,还加了异常兜底避免冗余内容写入:

import tweepy
import csv
import sys

# 你的认证信息
ckey = 'x...'
csecret = 'x...'
atoken = 'x...'
asecret = 'x...'

def init_twitter_auth():
    auth = tweepy.OAuthHandler(ckey, csecret)
    auth.set_access_token(atoken, asecret)
    return auth

class FilteredTweetStream(tweepy.StreamListener):
    def on_status(self, status):
        try:
            # 精准提取推文内容:优先处理转推,再处理普通推文
            if hasattr(status, 'retweeted_status'):
                # 转推取原始推文的文本
                tweet_content = status.retweeted_status.text
            else:
                # 普通推文直接取顶层text字段
                tweet_content = status.text
            
            # 处理特殊字符编码,避免写入CSV时出错
            tweet_content = tweet_content.encode('utf-8').decode('utf-8')
            
            # 仅写入需要的text字段到CSV
            with open('filtered_tweets.csv', 'a', newline='', encoding='utf-8') as csv_file:
                writer = csv.writer(csv_file)
                # 如果需要其他字段,比如id或时间,直接在列表里添加即可:[status.id_str, status.created_at, tweet_content]
                writer.writerow([tweet_content])
                
        except Exception as e:
            # 出错时只打印错误,跳过这条推文,绝不写入整个对象
            print(f"处理推文失败: {str(e)}", file=sys.stderr)
            return True

    def on_error(self, status_code):
        print(f"API请求错误,状态码: {status_code}")
        if status_code == 420:
            # 触发API限流时,主动断开流连接
            return False

if __name__ == '__main__':
    auth = init_twitter_auth()
    stream_listener = FilteredTweetStream()
    tweet_stream = tweepy.Stream(auth=auth, listener=stream_listener)
    # 替换成你要过滤的关键词
    tweet_stream.filter(track=['your_target_keyword'], languages=['en'])

关键优化点

  • 区分推文类型:用hasattr判断是否为转推,分别提取对应路径的text字段,确保普通推文也能精准取值。
  • 异常兜底:捕获提取字段时的所有异常,出错时仅打印错误信息并跳过,避免把整个推文对象写入CSV。
  • 编码处理:统一处理特殊字符的编码问题,防止写入CSV时出现乱码或格式错误。
  • CSV写入优化:添加newline=''参数,避免Windows系统下生成的CSV出现空行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:35:31