使用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
相关产品推荐
相关产品推荐

