简单介绍一下您的团队,即可获得:
一个 Reddit 帖子页包含主贴及其前 25 条评论,Web Unlocker 按 1 页计费。Apify 上的 Reddit 评论采集工具则把主贴和每条评论各算作一行来计费。
一页,25 条评论。
四页,100 条评论。
把同一个帖子按最佳、最新、最热和最早排序打开:每种排序多一页,带来另外 25 条评论。单条评论自己的页面则包含它的回复。
1,000 个各含 25 条评论的帖子的费用
1,000 个主贴和 25,000 条评论,按公布价格计算
Apify 上最常用的三款 Reddit 采集工具,把每个主贴和每条评论都按一行计费,免费套餐为 26,000 行。
Reddit 的公开 API 将于 2027 年 3 月前关闭,而且 Reddit 采集工具按每条评论计费。下面是各条路线采集同样 1,000 个帖子所需的条件。
| 需要什么 | Reddit Data API | Apify | Bright Data | |
|---|---|---|---|---|
| 无需 Reddit 批准即可开始 | 是 | 否 | 是 | 是 |
| 您按什么付费 | 一页 | 一次 API 调用 | 每个主贴和每条评论 | 每条记录 |
| 1,000 个含 25 条评论的帖子 | $0.98 | 仅按合同 | $15.53 至 $104 | 每 1,000 条记录 $1.50 |
| 整个页面的 HTML 或 Markdown | 是 | 否 | 否 | 否 |
| 企业可免费开始 | 是 | 否 | 是 | 是 |
要采集的不只是 Reddit?Web Unlocker 以同样的方式、同样的价格返回任何页面。
Web Unlocker 本身没有提醒功能。您的脚本想多频繁就多频繁地请求 subreddit 的最新帖子,每次检查算一页:每天 96 次检查,每月合计 $2.82。
Syften 提醒每月 $29.95 起。
您自己的一次检查只需 $0.001。
直接请求 subreddit 只会得到空页面,因为 Reddit 的帖子是在浏览器里绘制出来的。Web Unlocker 用真实浏览器加载页面,并连同全部 27 个帖子一起返回。
填写上面的表单。密钥会在一个工作日内通过邮件送达。
要评论就选一个帖子,要最新内容就选按最新排序的 subreddit,或者用您的关键词搜索。
页面上的每个帖子和评论都带有作者、得分、时间和正文。
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python reddit_thread.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport html as entities
import json
import os
import re
import time
import requests
thread = "https://www.reddit.com/r/marketing/comments/1x6ko90/why_the_marketing_department_is_about_to_disappear/"
def scrape(url):
for attempt in range(3):
response = requests.get(
"https://parsing.webunlocker.gologin.com/v1/scrape",
params={"url": url, "geo": "us", "format": "json"},
headers={"apikey": os.environ["GOLOGIN_SCRAPING_API_KEY"]},
timeout=90,
)
page = response.json().get("data", {}).get("html", "") if response.ok else ""
if "<shreddit-comment" in page:
return page
time.sleep(5)
raise RuntimeError("No comments came back, try again later")
def attr(tag, name):
match = re.search(rf'\s{name}="([^"]*)"', tag)
return entities.unescape(match.group(1)) if match else None
def text(page, element_id):
start = page.find(f'id="{element_id}"')
end = page.find("</div>", start)
paragraphs = re.findall(r"<p>(.*?)</p>", page[start:end], re.S)
return "\n".join(entities.unescape(re.sub(r"<[^>]+>|\s+", " ", p)).strip() for p in paragraphs)
page = scrape(thread)
post = re.search(r"<shreddit-post\b[^>]*>", page).group(0)
comments = {}
for tag in re.findall(r'<shreddit-comment\b[^>]*thingid="t1_[^>]*>', page):
comment_id = attr(tag, "thingid")
comments[comment_id] = {
"author": attr(tag, "author"),
"score": attr(tag, "score"),
"depth": attr(tag, "depth"),
"text": text(page, f"{comment_id}-comment-rtjson-content"),
}
print(json.dumps({
"title": attr(post, "post-title"),
"score": attr(post, "score"),
"upvote_ratio": attr(post, "upvote-ratio"),
"comments_on_reddit": attr(post, "comment-count"),
"comments": list(comments.values()),
}, indent=2, ensure_ascii=False))GOLOGIN_SCRAPING_API_KEY=your_key node reddit-watch.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeconst subreddit = 'SaaS';
const keywords = ['marketing', 'pricing', 'launch'];
async function scrape(url) {
for (let attempt = 1; attempt <= 3; attempt++) {
const params = new URLSearchParams({ url, render_js: 'true', wait: '5000', geo: 'us', format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const page = response.ok ? (await response.json()).data?.html : '';
if (page?.includes('<shreddit-post')) return page;
await new Promise((resolve) => setTimeout(resolve, 5000));
}
throw new Error('No posts came back, try again later');
}
const page = await scrape(`https://www.reddit.com/r/${subreddit}/new/`);
const attr = (tag, name) => tag.match(new RegExp(`\\s${name}="([^"]*)"`))?.[1]?.replaceAll('&', '&').replaceAll(''', "'").replaceAll('"', '"');
const posts = new Map();
for (const [tag] of page.matchAll(/<shreddit-post\b[^>]*post-title=[^>]*>/g)) {
posts.set(attr(tag, 'permalink'), {
title: attr(tag, 'post-title'),
posted: attr(tag, 'created-timestamp'),
comments: attr(tag, 'comment-count'),
url: `https://www.reddit.com${attr(tag, 'permalink')}`,
});
}
const mentions = [...posts.values()].filter((post) => keywords.some((word) => post.title.toLowerCase().includes(word)));
console.log(`${posts.size} new posts in r/${subreddit}, ${mentions.length} mention your keywords`);
console.table(mentions);GOLOGIN_SCRAPING_API_KEY=your_key node reddit-markdown.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
const thread = 'https://www.reddit.com/r/marketing/comments/1x6ko90/why_the_marketing_department_is_about_to_disappear/';
async function scrape(url) {
for (let attempt = 1; attempt <= 3; attempt++) {
const params = new URLSearchParams({ url, geo: 'us', format: 'markdown' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const markdown = response.ok ? await response.text() : '';
if (markdown.includes('# Comments Section')) return markdown;
await new Promise((resolve) => setTimeout(resolve, 5000));
}
throw new Error('No comments came back, try again later');
}
const markdown = await scrape(thread);
const comments = markdown.slice(markdown.indexOf('# Comments Section'));
writeFileSync('thread.md', comments);
console.log(`thread.md: ${Math.round(comments.length / 1024)} KB of comments, ready for your model`);
console.log(comments.slice(0, 600));准备好用在自己的帖子上了吗?获取 API 密钥和免费请求额度。
Web Unlocker 返回页面上的前 25 条评论。Cloud Browser 在真实浏览器中打开 Reddit 并不断点击:95 秒内 286 条评论,深达五层。
它替您点开每一个“更多回复”:95 秒内 286 条评论,而在这个帖子里一页只有 25 条。
它像真人一样滚动 subreddit:90 秒内 576 个帖子,一直回溯到 2 月。
配置文件会保留会话,所以之后每次运行 Reddit 都能立即打开。含住宅 IP。
通过 Playwright、Puppeteer 或 Claude 运行。了解 Cloud Browser。
一个账户,一个代理网络,一套生态。按任务需要选择产品。
把 Reddit 页面地址发送给 Web Unlocker:可以是帖子、subreddit 或搜索。它会用真实浏览器打开页面并返回,页面上每个帖子和评论的作者、得分、时间和正文都在其中。上面的代码正是这样做的。
抓取帖子页面:里面有主贴及其前 25 条评论,按 1 页计费。把帖子按最新、最热或最早排序,每次多得 25 条;也可以打开任意一条评论自己的页面,获取它的回复。
用 requests 库把帖子地址发送给 Web Unlocker,再从页面中读取评论。上面的 Python 标签页是一份完整的脚本,已在真实 API 上测试过。
能。帖子、subreddit 和搜索都是公开页面,无需登录即可加载。Web Unlocker 像访客的浏览器一样看到它们并返回,不需要 Reddit API 密钥,也不需要审批。旧的 .json 地址和旧版 Reddit 现在要求登录,常规的 reddit.com 页面则不需要。
仅限已注册的非商业应用免费。商业用途需要 Reddit 的批准和合同。Reddit 不公布价格:2023 年公开的最后一次费率是 5,000 万次调用 $12,000。
未在 Reddit 注册的应用从 2027 年 1 月 12 日起失去 API 访问权限,公开 API 访问将在 2027 年 3 月前结束。Reddit 页面仍然公开,Web Unlocker 读取的就是这些页面。
没有官方的替代品。复制 Reddit 内容的存档收录帖子的时间更晚,也漏掉最新的投票。Web Unlocker 读取的是 Reddit 本身,所以帖子显示的是您采集那一刻的得分。
能,逐页进行:每页列出约 25 个帖子,下一页就是多一次请求,价格相同。Reddit 会在约 1,000 个帖子处截断任何列表,所以想要更多,请按搜索词或时间切分。
能。发送带有您关键词的 reddit.com/search 地址,按最新或最热排序,搜帖子或搜评论,然后逐页翻看结果。
Web Unlocker 返回的是页面,而不是表格,所以在您看到之前不会丢失任何内容。把它转成 CSV 只需几行代码,或者一句提示词:用 Gologin scraping skill 把页面交给 Claude,让它输出 CSV。
每 1,000 个页面低于 $1,每个页面价格相同。一个帖子连同前 25 条评论算 1 页,所以 1,000 个帖子约合 $1。页面加载失败不收费。套餐每月 $49 起,含 50,000 次请求。
有,可以免费开始:Web Unlocker 附带 1,000 次免费请求,足够采集 1,000 个帖子及其热门评论。
这取决于您的需求。Apify 和 Bright Data 出售整理好的现成数据行,并按每个帖子和每条评论计费。Web Unlocker 以一个价格返回整个 Reddit 页面,所以评论随帖子一起到手,解析方式由您决定。
帖子、subreddit 和搜索都是公开页面,无需登录即可加载。Web Unlocker 像访客的浏览器一样加载它们并返回页面。您采集什么、如何使用,由您自己决定,请对照适用于您项目的规则自行核对。
简单介绍一下您的团队,即可获得: