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

使用Tweepy实现特定国家指定日期批量关键词推文追踪的技术求助

使用Tweepy追踪加拿大含指定情绪关键词的英文推文(2020-03-01起)

看起来你已经有了一个不错的开端,拿到了加拿大的Place ID来限定推文地域,接下来只需要把你的情绪关键词整合到搜索查询里,同时注意Twitter API的一些限制细节。下面是完善后的代码方案,我会逐步解释关键点:

第一步:整理关键词并格式化查询字符串

你列出的25个情绪关键词需要用OR连接,这样搜索时会返回包含任意一个关键词的推文。如果需要精确匹配关键词(避免部分匹配,比如"joy"不会匹配"joyful"),可以给每个关键词加上双引号:

# 定义你的情绪关键词列表
emotion_keywords = [
    "vigilance", "anticipation", "interesting", "ecstacy", "joy",
    "serenity", "admiration", "trust", "acceptance", "terror",
    "fear", "apprehensive", "amazement", "surprize", "distraction",
    "grief", "sadness", "pensiveness", "loathing", "disgust",
    "boredom", "rage", "anger", "annoyance"
]

# 格式化关键词为Twitter搜索支持的OR连接格式(添加双引号做精确匹配)
keywords_query = " OR ".join([f'"{kw}"' for kw in emotion_keywords])
# 如果不需要精确匹配,用下面这行:
# keywords_query = " OR ".join(emotion_keywords)

第二步:拼接完整的搜索Query

把Place ID、日期范围、关键词和语言限制整合到一个查询字符串里,用括号把关键词组起来确保逻辑优先级:

# 你的现有代码:获取加拿大的Place ID
places = api.geo_search(query="Canada", granularity="country")
place_id = places[0].id

# 拼接完整搜索Query
search_query = f"place:{place_id} since:2020-03-01 ({keywords_query}) lang:en"

第三步:完整的可运行代码示例

把所有部分整合,加上API初始化、错误处理和推文迭代逻辑:

import tweepy

# 替换成你自己的Twitter API密钥
consumer_key = "YOUR_CONSUMER_KEY"
consumer_secret = "YOUR_CONSUMER_SECRET"
access_token = "YOUR_ACCESS_TOKEN"
access_token_secret = "YOUR_ACCESS_TOKEN_SECRET"

# 初始化API,开启自动等待速率限制
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True)

# 定义情绪关键词列表
emotion_keywords = [
    "vigilance", "anticipation", "interesting", "ecstacy", "joy",
    "serenity", "admiration", "trust", "acceptance", "terror",
    "fear", "apprehensive", "amazement", "surprize", "distraction",
    "grief", "sadness", "pensiveness", "loathing", "disgust",
    "boredom", "rage", "anger", "annoyance"
]

# 格式化关键词查询
keywords_query = " OR ".join([f'"{kw}"' for kw in emotion_keywords])

# 获取加拿大Place ID(增加空值判断)
places = api.geo_search(query="Canada", granularity="country")
if not places:
    raise ValueError("无法获取加拿大的Place ID,请检查API权限或查询参数")
place_id = places[0].id

# 拼接完整搜索Query
search_query = f"place:{place_id} since:2020-03-01 ({keywords_query}) lang:en"

# 设置要获取的推文数量
num_tweets = 1000

# 批量获取并处理推文
try:
    public_tweets = tweepy.Cursor(api.search, q=search_query).items(num_tweets)
    
    for tweet in public_tweets:
        # 这里可以替换成你的自定义处理逻辑(比如保存到数据库/文件)
        print(f"@{tweet.user.screen_name} [{tweet.created_at}]: {tweet.text}\n")
except tweepy.TweepError as e:
    print(f"API请求出错: {e.reason}")

关键注意事项

  • API历史搜索限制:标准Twitter API v1.1只能搜索最近7天的推文。如果要获取2020-03-01至今的历史数据,你需要申请Twitter学术研究API,并改用api.search_full_archive()方法。
  • 速率限制:开启wait_on_rate_limit=True可以让Tweepy自动处理API速率限制,避免频繁报错。
  • 关键词匹配灵活性:如果希望匹配关键词的衍生形式(比如"joy"匹配"joyful"),可以去掉双引号,或者使用joy*这样的通配符(Twitter搜索支持通配符语法)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:07:28