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

PRAW调用subreddit.new()传入after参数触发TypeError求助

解决PRAW调用subreddit.new()传入after参数触发TypeError的问题

错误原因

你直接将after/before作为关键字参数传给subreddit.new(),但PRAW的subreddit.new()方法并不支持直接接收这些分页参数。这类分页标记需要通过params字典传递,因为底层的ListingGenerator构造函数仅接受params参数来处理分页相关的查询参数。

修正后的代码示例

下面是符合需求的完整代码,同时修复了分页参数的传递问题:

import praw

# 初始化Reddit客户端(替换为你的凭证)
reddit = praw.Reddit(
    client_id="你的客户端ID",
    client_secret="你的客户端密钥",
    user_agent="自定义用户代理(格式:平台:应用名:版本号 (by /u/你的用户名))"
)

subreddit = reddit.subreddit("askreddit")
after_token = None

while True:
    # 将分页标记放入params字典中传递
    posts_generator = subreddit.new(params={"after": after_token})
    posts = list(posts_generator)
    
    if not posts:
        break  # 没有更多帖子时终止循环
    
    for post in posts:
        # 筛选评论数≥100的帖子
        if post.num_comments >= 100:
            # 加载所有嵌套评论(避免遗漏深层评论)
            post.comments.replace_more(limit=None)
            # 提取≥100字的评论
            qualified_comments = [
                comment.body for comment in post.comments.list()
                if len(comment.body.strip()) >= 100
            ]
            
            if qualified_comments:
                print(f"### 帖子标题: {post.title}")
                print("符合要求的评论:")
                for idx, comment in enumerate(qualified_comments, 1):
                    print(f"{idx}. {comment}\n")
    
    # 更新分页标记,用于获取下一页内容
    after_token = posts_generator._next_page_token

关键注意事项

  1. 分页参数传递:所有分页相关的参数(如after、before、limit)都需要放入params字典中,而不是作为独立关键字参数传给subreddit.new()。
  2. 评论加载:必须调用post.comments.replace_more(limit=None)来加载所有嵌套的"更多评论",否则会遗漏深层的评论内容。
  3. API速率限制:Reddit API有请求频率限制,避免短时间内发起大量请求,必要时可添加延迟(如time.sleep(2))。
  4. 版本兼容:确保使用最新版PRAW,旧版本可能存在参数差异,可执行pip install --upgrade praw更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:02:19