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

