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

如何识别statuses/filter流式API返回推文对应的跟踪关键词

Tweepy流式采集识别命中跟踪关键词实现方法

要解决这个问题,你可以在获取到推文文本后,和预设的跟踪关键词列表做匹配,提取出当前推文命中的所有关键词,同时你原有代码存在缩进错误,也需要同步修正:

核心改动点

  • 把跟踪关键词列表单独定义为公共变量,避免重复编写
  • 新增大小写不敏感的关键词匹配逻辑,支持单条推文命中多个关键词的场景
  • 修正原有代码的缩进错误(on_error方法位置、文件写入缩进、流初始化位置等问题)

修改后完整代码

import tweepy
from tweepy import Stream, StreamListener
import json
import csv
import nltk
nltk.download('punkt')

# 单独定义跟踪关键词列表,统一维护
TRACK_KEYWORDS = ['Trump', 'ocean', 'Democrat', 'Republican', 'gardening','BMCSoftware', 'school', 'CT', '#metoo', 'governor', 'Iran']

class MyListener(StreamListener):
    def on_data(self, data):
        raw_tweets = json.loads(data)
        try:
            created_at = raw_tweets['created_at']
            tweet_text = raw_tweets['text']
            tweet_id = raw_tweets['id']
            screen_name = raw_tweets['user']['screen_name']
            hashtags = raw_tweets['entities']['hashtags']
            description = raw_tweets['user']['description']
            retweet_count = raw_tweets['retweet_count']
            
            # 新增:匹配命中的关键词,大小写不敏感
            matched_keywords = []
            lower_text = tweet_text.lower()
            for kw in TRACK_KEYWORDS:
                if kw.lower() in lower_text:
                    matched_keywords.append(kw)
            # 把命中的关键词转成字符串方便存入csv
            matched_kw_str = ','.join(matched_keywords)

            with open('Stream_data.csv', 'a', encoding='utf-8') as myFile:
                writer = csv.writer(myFile)
                # 新增命中关键词字段存入csv
                writer.writerow([created_at, tweet_id, screen_name, hashtags, description, tweet_text, retweet_count, matched_kw_str])
            
            print("created_at: ", created_at)
            print("id: ", tweet_id)
            print("screen_name: ", screen_name)
            print("hashtag: ", hashtags)
            print("description: ", description)
            print("text: ", tweet_text)
            print("retweet: ", retweet_count)
            print("命中关键词: ", matched_kw_str)

        except Exception as e:
            # 打印错误信息方便排查
            print("处理出错: ", e)

    def on_error(self, status):
        print("接口报错: ", status)

# 鉴权和流初始化逻辑放在类外,替换成你自己的密钥即可
consumer_key = '你的consumer_key'
consumer_secret = '你的consumer_secret'
access_token = '你的access_token'
access_token_secret = '你的access_token_secret'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

twitter_stream = Stream(auth, MyListener())
twitter_stream.filter(track=TRACK_KEYWORDS)

补充说明

如果你需要更精确的匹配(比如避免短词被误命中,比如CT可能出现在其他单词里),可以改成正则全词匹配,把匹配逻辑替换为:

import re
for kw in TRACK_KEYWORDS:
    # 构造全词匹配的正则,忽略大小写
    pattern = re.compile(r'\b' + re.escape(kw) + r'\b', re.IGNORECASE)
    if pattern.search(tweet_text):
        matched_keywords.append(kw)

存入csv时新增的encoding='utf-8'参数可以避免特殊字符乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 09:18:00