使用Tweepy(学术版API 2.0)获取推文回复时遭遇429请求过多错误
解决Tweepy调用Twitter API 2.0(学术访问)出现429错误的方案
先明确学术访问的速率限制
Twitter API 2.0学术访问下,search_recent_tweets的速率限制为每15分钟180次请求,单次请求最多返回100条结果。这个限额比普通访问高,但短时间内请求量超标仍会触发429错误,手动加time.sleep(1)通常无法精准匹配限额规则,所以没用。
最优解决方案:用Tweepy内置的速率限制处理
创建tweepy.Client时添加wait_on_rate_limit=True参数,Tweepy会自动检测速率限制,触发429时自动等待到限制重置后再继续请求,无需手动处理sleep。
基础修改后的代码
import tweepy bearer_token = "your_bearer_token" # 开启自动速率限制等待 twitter_client = tweepy.Client(bearer_token=bearer_token, wait_on_rate_limit=True) tweet_id = "your_target_tweet_id" def get_replies(tweet_ID): query = f"conversation_id:{tweet_ID} is:reply" # 设置max_results=100,减少请求次数 replies = twitter_client.search_recent_tweets(query=query, max_results=100) return replies get_replies(tweet_id)
获取全部回复(处理分页)
如果目标推文的回复超过100条,search_recent_tweets只会返回第一页结果,用Tweepy的Paginator结合自动速率限制处理,可获取所有回复:
import tweepy bearer_token = "your_bearer_token" twitter_client = tweepy.Client(bearer_token=bearer_token, wait_on_rate_limit=True) tweet_id = "your_target_tweet_id" def get_all_replies(tweet_ID): query = f"conversation_id:{tweet_ID} is:reply" all_replies = [] # 遍历所有分页结果 for page in tweepy.Paginator(twitter_client.search_recent_tweets, query=query, max_results=100): # 避免page.data为None时报错 all_replies.extend(page.data or []) return all_replies all_replies = get_all_replies(tweet_id)
额外注意事项
- 若同时调用其他Twitter API端点,要注意这些请求会共享学术访问的总限额,避免跨端点请求量超标。
- 不要循环高频调用
get_replies函数,即使加手动sleep,也很难精准控制在15分钟180次的限额内,依赖Tweepy的自动处理更可靠。
内容的提问来源于stack exchange,提问作者Alexandros
相关产品推荐
相关产品推荐

