如何使用 Tweepy 正确获取推文回复并避免 429 错误

冬伟吖_4571

冬伟吖_4571

2026-10-08

844人浏览

原创

如何使用 Tweepy 正确获取推文回复并避免 429 错误

本文详解在 twitter api v2(学术研究访问权限)下,使用 tweepy 获取指定推文所有回复时遭遇“429 too many requests”错误的根本原因与可靠解决方案,包括合理休眠策略、分页处理及请求频率控制。

本文详解在 twitter api v2(学术研究访问权限)下,使用 tweepy 获取指定推文所有回复时遭遇“429 too many requests”错误的根本原因与可靠解决方案,包括合理休眠策略、分页处理及请求频率控制。

Twitter API v2 对请求频率有严格限制,即使你已获得学术研究访问权限(Academic Research track),也并非无限制调用——该权限主要提升的是数据回溯深度(最长30天)和总请求数量配额(每月200万条),但每15分钟的速率限制(rate limit window)仍受具体端点约束。

以 search_recent_tweets 端点为例(用于检索回复),其基础速率限制为:
✅ 300 次请求 / 15 分钟(学术权限)
⚠️ 但注意:这是全账户共享配额,若你的代码中存在未处理分页、重复查询或并发调用,极易快速耗尽配额,触发 429 Too Many Requests 错误。

你当前代码中的 time.sleep(1) 放置位置不当且时长严重不足——它仅在函数开头延迟1秒,而实际请求发生在 twitter_client.search_recent_tweets() 执行瞬间;更重要的是,单次调用即消耗1个配额单位,1秒间隔远低于安全阈值。

✅ 正确做法是:在每次实际 API 调用后强制休眠,并确保间隔 ≥ 3 秒(推荐 5 秒),以留出网络波动与服务器响应时间余量。同时,务必启用分页支持,一次性获取全部回复而非多次低效请求:

import tweepy
import time

bearer_token = "your_bearer_token_here"
client = tweepy.Client(bearer_token=bearer_token, wait_on_rate_limit=False)  # 关键:禁用自动等待(我们手动控制)

def fetch_tweet_replies(tweet_id: str, max_results: int = 100) -> list:
    """
    获取指定 tweet_id 的所有回复(支持分页)
    max_results: 单次请求最多返回100条(API v2 限制)
    """
    replies = []
    query = f"conversation_id:{tweet_id} is:reply"

    # 使用 Paginator 实现自动分页(推荐)
    paginator = tweepy.Paginator(
        client.search_recent_tweets,
        query=query,
        tweet_fields=["created_at", "author_id", "in_reply_to_user_id"],
        max_results=max_results,
        limit=5  # 最多获取5页(即最多500条回复)
    ).flatten(limit=500)  # 总条数上限

    for tweet in paginator:
        replies.append({
            "id": tweet.id,
            "text": tweet.text,
            "created_at": tweet.created_at
        })
        time.sleep(5)  # ✅ 每获取一条 tweet 后休眠?不!更优策略是——每完成一页请求后休眠

    return replies

# 更稳健的写法:按页休眠(推荐)
def fetch_replies_by_page(tweet_id: str, max_results: int = 100):
    replies = []
    query = f"conversation_id:{tweet_id} is:reply"

    # 手动分页 + 显式休眠
    next_token = None
    while True:
        try:
            response = client.search_recent_tweets(
                query=query,
                tweet_fields=["created_at"],
                max_results=max_results,
                next_token=next_token
            )

            if response.data:
                replies.extend([{"id": t.id, "text": t.text} for t in response.data])

            next_token = response.meta.get("next_token")
            if not next_token:
                break

            time.sleep(5)  # ✅ 每页请求后休眠5秒,严格遵守速率窗口

        except tweepy.TooManyRequests as e:
            print(f"Rate limited. Waiting 15 minutes... ({e})")
            time.sleep(15 * 60)
            continue

    return replies

? 关键注意事项:

  • ❌ 不要依赖 wait_on_rate_limit=True(Tweepy v4.13+ 已弃用该参数);
  • ✅ 始终检查 response.meta.rate_limit_remaining 和 reset 时间戳(需启用 return_headers=True);
  • ✅ 学术权限需在 X Developer Portal 明确启用,并确认 App 处于「Academic Research」状态;
  • ✅ 生产环境建议集成指数退避(exponential backoff)与异常重试机制,而非固定休眠。

通过合理控制请求节奏、启用分页及监控配额余量,即可稳定、合规地批量获取推文对话树数据。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1671

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4204

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1669

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

24377

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2987

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3007

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1163

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2323

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习