Reddit 数据抓取助手
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/reddit-fetch 技能到当前 AI 助手中。
技能介绍
问题:Reddit 直接抓 JSON 已被全面拦截
在 Reddit 上做数据分析,最省事的入口本是它的公开 JSON 接口——任何 Reddit 链接后面加 .json 就能拿到结构化数据。但如今自动化访问几乎被彻底封死:无论宿主机还是容器,无论怎么改 User-Agent,curl 基本都返回 403;连用冷启动的 Playwright 直接打开 reddit.com,也会撞上 “You've been blocked by network security” 挑战页。这意味着,能跑通的路径不再是“直接请求”,而是先骗过一次风控拿到会话 Cookie。
核心能力:用 DuckDuckGo 跳转解锁 .json
本技能的关键在于一个前置“hop”:通过 DuckDuckGo 搜索结果跳转到 Reddit,让 Reddit 正常种下 session cookie,之后整场会话里就能直接访问 .json。
- Step 1:DDG hop
用 Playwright 打开形如 https://html.duckduckgo.com/html/?q=site:reddit.com/r/SUBREDDIT+YOUR+QUERY 的搜索 URL;取第一条结果的完整 href(DDG 重定向里必须带 rut token,只拿裸 /l/?uddg= 会 400),再 browser_navigate 到该完整跳转链接。它会落到任意一个真实 Reddit 页面(标题正常而非 “Blocked”),从而设置 cookie;不必恰好命中你要的那个帖子或版块。
- Step 2:直接读
.json
hop 成功后,会话内可把 Playwright 直接导航到 https://www.reddit.com/... 的 .json URL,并用 JSON.parse(document.body.innerText) 解析。排序参数照常可用,例如 sort=new&t=week 做最近一周拉取。
拿到数据后按已知 JSON 形状处理即可:列表页看 .data.children[].data(title / score / num_comments / author / id);帖子页解析 comments/POST_ID.json?limit=30&sort=top,其中 data[0] 是主帖,data[1].data.children(过滤 kind == "t1")是评论,嵌套回复结构相同。长评论建议截断输出(如 JS 中 body.slice(0, 300),jq 1.7+ 用 .body[:300])。
边界与注意点
- 若 Playwright 报
Browser is already in use,通常是一个僵死实例占用 profile:按提示pkill -f ms-playwright-mcp(或清掉报错中的 profile 目录)后重试。 browser_evaluate必须包在try/catch里;失败时先回传document.body.innerText.slice(0,200),方便一眼看出是不是挑战页(说明 cookie 过期,需重新做 DDG hop)。- Reddit 即使解锁后限流也很激进:不要并发。串行请求并在两次导航间
sleep 2/sleep 3;出现空响应(0 bytes)等 3–5 秒重试,遇到 HTTP 429 退避 10–15 秒。 - 需要比
.json?limit=更多的评论时,可在 hop 后加载渲染后的 thread 页面,改抓shredditDOM。若环境没有 Playwright,可用 Claude for Chrome 打开 thread 或.json页面读取;curl只值得在已经要起 shell、又没浏览器时快速试一次(带浏览器 UA,-L跟随重定向,URL 用单引号防止 shell 吃掉&),一旦 403 就直接回到 DDG hop,不要再反复换 UA 硬刚。
使用场景
- 你在做社区舆情分析,需要按 subreddit 拉取最近一周的帖子标题、得分和评论,建立研究样本。
- 你想复盘某篇帖子的讨论脉络,需要先通过 DDG 跳转解锁 Reddit,再读取 comments JSON 的 top 评论。
- 自动化管道已经会调 curl,但 Reddit 持续返回 403;你需要在已有 shell 流程里做一次快速兜底抓取。
- 你在比对 Reddit 讨论的热度变化,需要串行抓取列表页和多个帖子页,避免触发限流或挑战页。
适合人员
- 数据工程师:想把 Reddit JSON 接进 ETL,但需要先解决 403 和限流,稳定产出帖子与评论表。
- 社区运营:想监控指定 subreddit 最近一周的高赞话题和评论区反馈,用于选题和复盘。
- 爬虫工程师:用 Playwright 复现 DDG 跳转拿到会话 Cookie,再批量但串行读取 Reddit JSON。
- 研究人员:需要从 Reddit 帖子和评论中提取作者、得分、正文和嵌套回复,形成分析语料。