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

使用PRAW爬取Reddit数据触发401错误如何完成身份认证

PRAW爬取Reddit返回401错误的解决方法

你遇到的ResponseException: received 401 HTTP response是典型的鉴权失败错误,核心原因是初始化PRAW实例时必填的应用凭证参数全部为空,没有通过Reddit的接口身份校验,和代码逻辑无关。

完整认证操作流程

不需要啃晦涩的OAuth2文档,按下面步骤操作就能拿到合法凭证:

  • 登录你的Reddit账号,进入账号设置页面,找到「Apps」标签页,拉到页面最下方点击「create another app...」按钮
  • 在弹出的创建表单里填对应信息:
    • 应用名称自定义,方便自己识别即可
    • 应用类型必须选script(脚本类,专门给个人自用的爬取、自动化脚本用)
    • redirect uri字段直接填http://localhost:8080即可,其余非必填字段可以留空
    • 点击底部创建按钮,等待应用生成
  • 复制生成的应用凭证,填到代码对应参数位:
    • 应用名称下方的一串短随机字符是client_id
    • 标注为secret的字符串是client_secret
    • user_agent按固定格式填写即可,参考格式:<运行系统>:<自定义应用名>:<版本号> (by /u/<你的Reddit用户名>),例如windows:ml_post_crawler:v1.0 (by /u/your_reddit_name),不要留空也不要写test、praw这类过于通用的字符串,容易被接口拦截
    • 注意:如果只是爬取公开子版块的公开内容,完全不需要填写username和password参数,留空或者乱填反而会触发额外校验报错,直接删掉这两个参数即可

修正后可直接运行的代码(含存DataFrame/CSV逻辑)

import praw
import pandas as pd

# 替换成你自己拿到的真实凭证
reddit = praw.Reddit(
    client_id='你的client_id',
    client_secret='你的client_secret',
    user_agent='你自己按规则写的user_agent'
)

post_list = []
# 拉取MachineLearning子版块的10条热帖
for post in reddit.subreddit('MachineLearning').hot(limit=10):
    post_list.append({
        "帖子标题": post.title,
        "点赞数": post.score,
        "帖子链接": post.url,
        "发布时间": post.created_utc,
        "正文内容": post.selftext
    })

# 转DataFrame并存为CSV文件
df = pd.DataFrame(post_list)
df.to_csv("reddit_ml_hot_posts.csv", index=False, encoding='utf-8-sig')
print(f"爬取完成,共获取{len(df)}条数据,已保存到CSV文件")

常见踩坑排查

  • 应用类型选错:如果创建时选了web app、installed app类型,用对应凭证走脚本模式鉴权会一直报401,必须选script类型
  • 凭证同步延迟:刚创建完应用如果还是报401,等2-3分钟再重试,Reddit的凭证同步存在短时间延迟
  • 账号问题:如果确实需要用账号权限(比如爬取自己关注的私有内容),填用户名密码前先确认账号没开启二次验证,开启二次验证的账号无法直接用密码登录鉴权
  • IP拦截:如果短时间请求量过大,可能被临时限制IP,这种情况降低请求频率即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:18:13