logiover/reddit-historical-archive-scraper
GitHub: logiover/reddit-historical-archive-scraper
一款基于 Apify 的 Reddit 历史归档爬虫,支持按日期全文检索多年前的帖子和评论,无需 API key 或代理。
Stars: 0 | Forks: 0
# Reddit 历史归档爬虫 — 按日期抓取旧帖子和评论(无需 API)
[](https://apify.com/logiover/reddit-historical-archive-scraper)
[](https://apify.com/logiover/reddit-historical-archive-scraper)
[](https://apify.com/logiover/reddit-historical-archive-scraper)
[](https://apify.com/logiover/reddit-historical-archive-scraper)
[](https://apify.com/logiover/reddit-historical-archive-scraper)
### ▶️ [在 Apify 上运行 Reddit 历史归档爬虫](https://apify.com/logiover/reddit-historical-archive-scraper)
抓取**按日期排序的多年历史 Reddit 帖子和评论** —— 这些内容是 Reddit 自身的搜索和列表已经无法触及的。这款 **Reddit 历史爬虫**从公共归档源中提取深层历史记录,因此您可以**对评论正文进行全文搜索**,重构整个讨论串,并导出可追溯至 **10 多年前**的完整用户历史记录。只需将其指向 subreddit、帖子 ID、用户名、关键词搜索或原始 Reddit URL,即可获取干净、扁平的数据行。**无需浏览器、无需 Reddit 登录、无需 API key、无需 client secret、无需代理。**
这是一款非官方的 **Reddit / Pushshift API 替代方案**,适用于**历史研究、AI/NLP 训练语料库、学术研究、品牌监控和回顾性分析**。每个帖子或评论都作为带有 `type` 字段的独立一行返回,可直接用于电子表格、数据仓库和 LLM pipeline —— 支持导出为 **JSON、JSONL、CSV、Excel 或 XML** 格式。
## ✨ 您将获得什么
帖子和评论将作为扁平化的数据集行返回,每行都标有 `type` 字段(`post` 或 `comment`)。
**帖子行**(`type: "post"`)
| 字段 | 描述 |
|-------|-------------|
| `id` / `fullname` | Reddit 帖子 ID 和全名(`t3_…`) |
| `subreddit` / `subredditNamePrefixed` | Subreddit 及其带 `r/…` 前缀的名称 |
| `author` | 发帖人的用户名 |
| `title` / `selftext` | 帖子标题和正文内容 |
| `url` / `permalink` / `domain` | 外部链接、Reddit 永久链接、链接域名 |
| `isSelf` / `over18` | 自发帖和 NSFW 标记 |
| `score` / `upvoteRatio` | 净点赞数和点赞比例 |
| `numComments` | 评论数量 |
| `flairText` / `thumbnail` | 帖子 flair 文本和缩略图 |
| `createdUtc` / `retrievedUtc` | 创建和抓取的时间戳 |
**评论行**(`type: "comment"`)
| 字段 | 描述 |
|-------|-------------|
| `id` / `fullname` | 评论 ID 和全名(`t1_…`) |
| `parentId` / `linkId` | 父级(帖子或评论)和链接(帖子)ID |
| `subreddit` / `author` | 所属 Subreddit 和评论者 |
| `body` | 评论正文 |
| `score` | 评论得分 |
| `depth` | 重构的讨论串层级 |
| `gilded` / `controversial` | 获奖标记和争议性标记 |
| `permalink` | 评论永久链接 |
| `createdUtc` / `edited` / `distinguished` | 时间戳、编辑和特殊身份标记 |
**用户与 Subreddit 视图** —— 当抓取用户或 Subreddit 时,数据集还会暴露以下列,例如 `username`、`linkKarma`、`commentKarma`、`totalKarma`、`verified`、`isGold`、`isMod`,以及 `displayNamePrefixed`、`subscribers`、`activeUserCount`、`subredditType`。
## 💡 用例
- **历史研究与归档** —— 收集某个 Subreddit 多年来的帖子和评论,用于对社区的纵向研究。
- **AI / NLP 训练语料库** —— 利用多年垂直领域 Subreddit 的文本和完整评论串,构建特定领域的数据集。
- **品牌与声誉监控** —— 全文搜索有史以来提及您品牌或产品的**每一条评论** —— 这是 Reddit 自身搜索无法做到的。
- **学术与新闻工作** —— 提取围绕特定事件、话题或选举的特定时间段内的 Reddit 讨论。
- **账号与讨论串分析** —— 提取某个用户的完整发帖和评论历史,或者获取单个帖子及其完整的已归档评论树。
- **情感与趋势回填** —— 重构特定日期范围内某个话题讨论的演变过程。
- **用于研究的已删除内容恢复** —— 挖掘目前已在实时网站上不可见的旧帖子和评论的归档副本。
## 🚀 快速开始
您只需一个免费的 Apify 账户。以下四种方法调用的都是**同一个托管的 Actor**。
### 1. Apify Console(无需代码)
1. 打开 **[Apify 上的 Reddit 历史归档爬虫](https://apify.com/logiover/reddit-historical-archive-scraper)** 并点击 **Try for free**。
2. 填入 **Subreddits**、**Post IDs**、**Usernames**、**Post Search Queries**、**Comment Search Queries** 或原始的 **Reddit URLs** 的任意组合。可以选择性地添加日期范围、最低分数限制和数量上限。
3. 点击 **Start**,然后从 **Output** 标签页导出为 JSON、CSV 或 Excel。默认输入会返回一个小样本,以便您立即查看数据行结构。
### 2. Apify CLI
```
npm install -g apify-cli
apify login
apify call logiover/reddit-historical-archive-scraper --input '{
"subreddits": ["wallstreetbets"],
"afterDate": "2021-01-01",
"beforeDate": "2021-02-28",
"sort": "top",
"minScore": 100,
"maxItems": 1000
}'
```
### 3. API / cURL
```
curl -X POST "https://api.apify.com/v2/acts/logiover~reddit-historical-archive-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"commentSearchQueries": ["Notion"],
"afterDate": "2024-01-01",
"sort": "new",
"maxItems": 500
}'
```
### 4. apify-client (JavaScript)
```
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('logiover/reddit-historical-archive-scraper').call({
usernames: ['spez'],
userContent: 'overview',
maxItemsPerTarget: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Pulled ${items.length} rows`);
```
### 5. apify-client (Python)
```
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("logiover/reddit-historical-archive-scraper").call(run_input={
"postIds": ["1abc234"],
"maxItems": 0,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["type"], row.get("author"), row.get("score"))
```
## 📥 输入
至少填写一个目标(subreddit、帖子 ID、用户名、搜索查询或 URL)。其他所有内容均为可选。
| 字段 | 类型 | 描述 |
|-------|------|-------------|
| `subreddits` | 数组 | 需要进行历史抓取的 Subreddit 名称(不带 `/r/` 前缀)。每一个都将作为列表抓取运行。 |
| `postIds` | 数组 | Reddit 帖子 ID(`/comments/XXXX/` 中的字母数字部分)。每个帖子都将连同其**所有**已归档的评论一起被抓取。 |
| `usernames` | 数组 | Reddit 用户名(不带 `/u/` 前缀)。根据 `userContent` 的设置返回历史帖子和/或评论。 |
| `searchQueries` | 数组 | 跨已归档**帖子**(标题 + 正文)的全文搜索,可结合日期、Subreddit 和分数过滤器使用。 |
| `commentSearchQueries` | 数组 | 跨已归档**评论正文**的全文搜索 —— 这是 Reddit 自身搜索无法实现的独特功能。 |
| `startUrls` | 数组 | 任何 Reddit URL —— Subreddit、帖子、用户或搜索。系统会自动检测类型;可自由混合 URL 类型。 |
| `sort` | 字符串 (下拉菜单) | `new`(优先返回最新归档内容)或 `top`(优先返回最高分)。`hot`、`rising`、`controversial`、`best` 将回退到 `new`。 |
| `afterDate` / `beforeDate` | 字符串 | 用于时间范围查询的 ISO 日期边界(`YYYY-MM-DD` 或完整的 ISO 时间戳)。 |
| `minScore` | 整数 | 仅返回达到或超过此分数(赞同数 − 反对数)的帖子/评论。 |
| `userContent` | 字符串 (下拉菜单) | 针对 usernames:`overview`(帖子 + 评论)、`submitted`(仅帖子)或 `comments`(仅评论)。 |
| `maxItems` | 整数 | 跨所有目标的全局硬性上限。`0` = 无限制。 |
| `maxItemsPerTarget` | 整数 | 每个 Subreddit / 帖子 / 用户 / 搜索的上限,以防止某一个庞大的目标耗尽预算。 |
| `requestDelayMs` | 整数 | 请求之间的毫秒延迟,以保持对归档服务器的友好访问(默认为 `1200`)。 |
| `maxRetries` | 整数 | 遇到频率限制 / 错误时的重试次数,采用指数退避策略(默认为 `5`)。 |
| `proxyConfiguration` | 对象 | 可选。在直连环境下运行良好;通过 Apify Proxy 路由可增强稳健性。 |
## 📤 输出
每个帖子和评论都是一行扁平的数据集记录。以下是一个示例 —— 先是一个帖子,接着是一条评论:
```
{
"type": "post",
"id": "l6omga",
"fullname": "t3_l6omga",
"subreddit": "wallstreetbets",
"subredditNamePrefixed": "r/wallstreetbets",
"author": "DeepFuckingValue",
"title": "GME YOLO update — Jan 28 2021",
"selftext": "…",
"url": "https://www.reddit.com/r/wallstreetbets/comments/l6omga/…",
"permalink": "/r/wallstreetbets/comments/l6omga/…",
"domain": "self.wallstreetbets",
"isSelf": true,
"over18": false,
"score": 234512,
"upvoteRatio": 0.94,
"numComments": 18422,
"flairText": "YOLO",
"createdUtc": "2021-01-28T14:03:11.000Z",
"retrievedUtc": "2026-07-12T12:00:00.000Z"
}
```
```
{
"type": "comment",
"id": "gkz1abc",
"fullname": "t1_gkz1abc",
"parentId": "t3_l6omga",
"linkId": "t3_l6omga",
"subreddit": "wallstreetbets",
"author": "diamond_hands_42",
"body": "To the moon 🚀🚀",
"score": 8123,
"depth": 0,
"gilded": 2,
"permalink": "/r/wallstreetbets/comments/l6omga/_/gkz1abc/",
"createdUtc": "2021-01-28T14:11:52.000Z",
"edited": false,
"distinguished": null
}
```
数据集提供了 **Posts**、**Comments**、**Users** 和 **Subreddits** 表格视图以便于快速浏览;在原始的 JSON/CSV 导出文件中始终可以获取完整的字段集合。
## 🔌 集成与自动化
- **Schedules** —— 定期运行 Actor,以保持对某个 Subreddit、话题或品牌提及的最新归档。
- **Webhooks** —— 完成时触发 webhook,将每次运行的结果追加到您自己的存储中。
- **Google Sheets / Drive** —— 将每次运行的数据集同步到电子表格中,供研究人员使用。
- **Amazon S3 / 存储** —— 将数据集导出到 S3 或任何存储桶中,用于语料库构建和数据仓储。
- **Zapier · Make · n8n · Pipedream** —— 通过 Apify 集成,将新归档的帖子/评论路由到 Slack、Notion、数据库或任何 HTTP endpoint。
- **Apify API** —— 通过一次 REST 调用将结果拉取到任何语言/数据库中(参见 [`examples/api-curl.md`](./examples/api-curl.md))。
## 📦 导出格式
每次运行的数据集都可以通过 API 下载或流式传输为 **JSON、JSONL、CSV、Excel (XLSX)、HTML 或 XML** —— 这种每项一行的扁平化结构可以无缝导入到电子表格、数据库和 LLM pipeline 中。
## ❓ 常见问题
### 自 Pushshift 关闭后,还有用于获取旧 Reddit 数据的公共 API 吗?
Reddit 自身的 API 和搜索只能触及较浅的近期内容,且旧版的公共批量服务已不再公开提供。相反,这款 Actor 读取的是维护良好的公共归档源 —— 无需 API key —— 因此它可以作为深度历史记录的实用 **Pushshift 替代方案**。
### 我需要 API key、登录账户或代理吗?
不需要。该爬虫通过直接连接读取公共归档数据 —— 无需 Reddit 账户、OAuth、API key、client secret 或代理。为了获得额外的稳健性,提供了一个代理开关,但默认是关闭的。
### 我可以抓取多早以前的旧 Reddit 帖子?
归档源索引了 Reddit 从早年至今的内容,因此您可以获取有多年历史的帖子和评论 —— 每次运行可获取数千条记录,远远超出 Reddit 自身搜索的深度。使用 `maxItems` 和 `maxItemsPerTarget` 来控制数量和成本。
### 我可以在 Reddit 评论正文中进行搜索吗?
可以 —— 使用 `commentSearchQueries` 可以跨已归档的评论进行全文搜索。Reddit 原生的搜索仅匹配帖子标题,而此功能可以找到 Reddit 历史中提及该词汇的每一条评论。
### 我该如何抓取某个 Subreddit 在特定年份的帖子?
列出该 Subreddit 并以 `YYYY-MM-DD` 格式设置 `afterDate` 和 `beforeDate`,以拉取有界限的历史时间窗口,这比 Reddit 自身的列表限制要深得多。
### 我该如何下载某个 Reddit 用户的完整发帖和评论历史?
将用户名添加到 `usernames` 中,并将 `userContent` 设置为 `overview`,即可返回该用户整个已归档历史中的已发布帖子和评论。
### 我该如何重建包含所有评论的整个 Reddit 讨论串?
在 `postIds` 中传入帖子 ID。Actor 将返回该帖子及其**所有**已归档的评论,作为一个扁平列表,并带有重构出的 `depth` 字段。
### 我该如何将旧的 Reddit 帖子和评论导出为 CSV 或 JSON?
运行爬虫,然后从 Apify Console 下载数据集为 CSV、JSON、Excel、HTML、XML 或 JSONL,或者通过 API 获取。每个帖子和评论都是一行扁平数据,可以无缝导入电子表格和数据库。
### 每次运行可以获得多少结果?
每次运行可获得数千条结果。数据量会根据您排队的目标数量以及您的 `maxItems` / `maxPerTarget` 上限而进行缩放。
### 抓取 Reddit 历史记录合法吗?
该 Actor 收集的是公开可用的已归档 Reddit 内容。您有责任在遵守 Reddit 条款、归档提供商条款以及适用法律(如 GDPR)的前提下使用这些数据。
## 🔗 logiover 的相关 Actor
正在构建更广泛的 Reddit 或社交媒体数据集?可以将此爬虫与以下工具配合使用:
- 🔴 [Reddit Search Scraper](https://apify.com/logiover/reddit-search-scraper) — 通过关键词搜索任何 Subreddit 的帖子和评论。
- 🔴 [Reddit Subreddit Scraper](https://apify.com/logiover/reddit-subreddit-scraper) — 拉取任何 Subreddit 的最新帖子。
👉 浏览所有 **[Apify Store 上的 logiover 爬虫](https://apify.com/logiover)** — 涵盖房地产、工作、加密货币、社交媒体和 B2B 数据的 180 多个 Actor。
📄 **仅为文档** — Actor 在 Apify 平台上运行。 ▶️ **运行地址:** [https://apify.com/logiover/reddit-historical-archive-scraper](https://apify.com/logiover/reddit-historical-archive-scraper)
基于 [MIT License](./LICENSE) 发布 · © 2026 logiover
标签:BeEF, Reddit, URL抓取, 命令控制, 数据可视化, 数据抓取, 数据采集, 爬虫, 社交媒体, 逆向工具