如何通过Python PRAW库获取Reddit账号订阅的subreddits
错误原因
你现有代码的核心问题是调用路径错误:PRAW没有把获取当前用户订阅子版块的方法挂在Redditor类下,你写的redditor.subscriber()本身不存在对应实现,自然会报错。
你找到的原生订阅列表查询接口,PRAW已经做了内置封装,不需要自己手写requests请求调用,直接用认证后的Reddit实例对应方法即可。
完整实现方案
代码分两步实现,先拉取旧账号订阅列表存本地,再登录新账号批量订阅。
第一步:导出旧账号订阅列表
import praw import json import time # 初始化旧账号认证实例 old_reddit = praw.Reddit( client_id = 'RXv8w855SBV_*********', client_secret = 'rWiK0nuxh8X0snK-************', password = '***', user_agent = 'GetSubs/0.01', username = 'fearthecooper' ) subscribed_subs = [] # limit=None表示拉取全量结果,PRAW自动处理分页 for sub in old_reddit.subreddits.subscriber(limit=None): subscribed_subs.append(sub.display_name) print(f"已拉取订阅:r/{sub.display_name}") # 保存到本地文件,避免重复请求 with open("sub_list.json", "w", encoding="utf-8") as f: json.dump(subscribed_subs, f, ensure_ascii=False, indent=2) print(f"导出完成,共获取{len(subscribed_subs)}个订阅子版块")
第二步:新账号批量导入订阅
import praw import json import time # 读取本地存储的订阅列表 with open("sub_list.json", "r", encoding="utf-8") as f: sub_list = json.load(f) # 初始化新账号认证实例 new_reddit = praw.Reddit( client_id = '新账号对应的应用client_id', client_secret = '新账号对应的应用client_secret', password = '新账号密码', user_agent = 'ImportSubs/0.01', username = '新账号用户名' ) for sub_name in sub_list: try: new_reddit.subreddit(sub_name).subscribe() print(f"成功订阅 r/{sub_name}") # 加1秒延时,避免触发接口频率限制 time.sleep(1) except Exception as e: print(f"订阅r/{sub_name}失败:{str(e)}")
关键说明
reddit.subreddits.subscriber()是PRAW对应用户订阅列表查询接口的官方封装,调用时自动使用当前Reddit实例绑定的认证用户身份,不需要额外指定用户名,也不需要手动实例化redditor对象。- 如果旧账号已经被封禁,需要确认你在旧账号下创建的脚本应用仍处于有效状态,否则无法通过API认证拉取数据。
- PRAW的列表类接口默认只返回前25条结果,拉取全量数据必须显式指定
limit=None,库会自动处理后续翻页逻辑,不需要手动传after/cursor参数。
内容的提问来源于stack exchange,提问作者CoopyThicc
相关产品推荐
相关产品推荐

