logiover/reddit-historical-archive-scraper

GitHub: logiover/reddit-historical-archive-scraper

一款基于 Apify 的 Reddit 历史归档爬虫,支持按日期全文检索多年前的帖子和评论,无需 API key 或代理。

Stars: 0 | Forks: 0

# Reddit 历史归档爬虫 — 按日期抓取旧帖子和评论(无需 API) [![Apify Actor](https://img.shields.io/badge/Apify-Actor-00A67E?logo=apify&logoColor=white)](https://apify.com/logiover/reddit-historical-archive-scraper) [![无需 API key](https://img.shields.io/badge/No%20API%20key-required-2ea44f)](https://apify.com/logiover/reddit-historical-archive-scraper) [![按结果付费](https://img.shields.io/badge/Pricing-Pay%20per%20result-1C7ED6)](https://apify.com/logiover/reddit-historical-archive-scraper) [![社交媒体](https://img.shields.io/badge/Category-Social%20Media-FF4500)](https://apify.com/logiover/reddit-historical-archive-scraper) [![导出](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-F59E0B)](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抓取, 命令控制, 数据可视化, 数据抓取, 数据采集, 爬虫, 社交媒体, 逆向工具