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

如何通过PRAW在请求阶段限制Reddit评论数量以优化程序?

如何在请求阶段限制Reddit评论获取数量以优化性能

你当前的代码问题在于submission.comments.replace_more(limit=None)会强制加载所有嵌套的"更多评论",这才是拖慢速度的核心——哪怕最后只返回10条,程序已经把整个评论树都拉下来了。

要在请求阶段直接限制评论数量,有两种可行的实现方式:

方法一:优化PRAW内置方法,避免加载全部评论

不要用replace_more(limit=None),而是控制加载更多评论的数量,同时直接迭代排序后的评论,取前N条就停止:

def get_comments(reddit: reddit, submission_id: str, limit:int = 10) -> list:
    submission = reddit.submission(id=submission_id)
    submission.comment_sort = "top"  # 先设置排序规则
    comments = []
    # 只加载必要的"更多评论",同时迭代获取评论
    for comment in submission.comments:
        if isinstance(comment, praw.models.MoreComments):
            # 只加载当前层级的更多评论,不递归加载全部
            comment_list = comment.comments()
            comments.extend(comment_list[:limit - len(comments)])
            if len(comments) >= limit:
                break
        else:
            comments.append(comment)
            if len(comments) >= limit:
                break
    return comments[:limit]

这个思路的核心是:

  • 先设置排序为top,让API返回的第一条就是最高赞评论
  • 迭代评论时遇到MoreComments,只加载当前层级的更多评论,而非全部嵌套的评论
  • 每获取一条就检查是否达到limit,一旦满足就停止,避免发起多余请求

方法二:直接调用Reddit API端点,指定请求参数

如果PRAW的封装满足不了需求,可以直接调用Reddit的/comments/{submission_id} API,通过limit参数直接限制返回的评论数量:

import praw

def get_comments_direct_api(reddit: praw.Reddit, submission_id: str, limit:int = 10) -> list:
    # 调用API,指定排序和数量限制
    response = reddit.get(f"/comments/{submission_id}", params={
        "sort": "top",
        "limit": limit
    })
    # 解析返回的JSON数据,提取评论
    comments_data = response[1]["data"]["children"]
    # 转换为PRAW的Comment对象(可选,如果你需要用PRAW的内置方法)
    comments = [praw.models.Comment(reddit, data=item["data"]) for item in comments_data]
    return comments

这种方式直接让API只返回你需要的limit条评论,完全避免了多余的数据传输,性能提升最明显。需要注意:

  • 默认返回的是顶级评论,如果需要嵌套评论,得额外处理,但如果只需要top级别的评论,这个方法最高效
  • 可以根据需求添加其他参数,比如depth控制评论嵌套深度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:15:35