
Actor 是托管运行的采集程序。这 2 款产品都是 Apify Actor。我们是 Chronometrica 的发布方。对于本文所述的定向帖子搜索需求,我们推荐使用它。本次比较使用的是 2026 年 10 月 20 日留存的产品资料。本文未报告新的同条件对比测试、实测速度差异或价格优势。
买家的问题很实际:如何在选定的子版块中采集关键词匹配结果?一个 Reddit 公开提问正在寻找满足这一需求的工具。该问题没有要求获取完整的 Reddit 存档。这个问题也不能证明每条返回的匹配结果都有用。
!查询卡片连接到已审核的匹配结果,以及分别存放噪声和未知结果的托盘。
先确定需要哪些记录
关键词研究需要明确的输出约定。也就是写清楚需要哪些记录,以及每条记录必须说明什么。
对于范围明确的研究,可以这样写:在 2 个指定社区中采集同一查询的帖子,保留来源详情,并审核帖子含义。你需要知道请求搜索的是哪个社区、每篇帖子实际出现在哪个社区,以及哪些搜索返回了不完整的结果。
范围更广的采集任务需要不同的记录类型。Trudax 文档列出了帖子、评论、社区和用户采集功能,以及子版块搜索、排序和日期筛选功能。如果任务需要合并采集多种记录,这种更广的采集范围就是选择它的主要理由。Trudax 文档。
| 需要完成的工作 | 推荐选择 | 选择理由 |
|---|---|---|
| 审核多个指定社区中匹配到的不重复帖子 | Chronometrica | 保留请求子版块与匹配子版块字段、查询上下文,并单独记录搜索结果状态 |
| 在搜索帖子的同时,采集社区或用户详情,或已知讨论帖中的评论 | Trudax Reddit Scraper Lite | 文档列出的采集模式更广 |
来源:Chronometrica、Trudax。
配置任何一款工具之前,先写清楚需要的记录类型。如果问题需要每篇帖子下的评论,仅有帖子列表无法回答。反过来,如果做决定只需要少量经过审核的示例,就没有必要大量采集。
本文帮助你选择采集工具,并明确其输出要求。如果需要提高查询相关性的方法,请参阅如何跟踪 Reddit 关键词并减少噪声。
Chronometrica 明确提供了哪些信息
Chronometrica 文档列出了 5 项搜索设置:`query`、可选的 `subreddits`、`maxResults`、`sort` 和 `time`。如果指定子版块,输入可接受 1 到 20 个。这组精简的设置适合范围明确的帖子搜索任务。Chronometrica 文档。
它返回的记录行保留了 `inputQuery`、`requestedSubreddit`、`matchedSubreddit`、`canonicalPostUrl`、`postId` 和可用性字段。其 `OUTPUT` 还会单独列出搜索结果状态,包括空结果、部分结果和失败状态。这些信息让你可以核查每篇已保存帖子的来源,以及每次搜索的状态。Chronometrica 文档。
请求社区和匹配社区回答的是不同的问题。`requestedSubreddit` 记录搜索所用的社区。`matchedSubreddit` 记录返回的匹配结果所属的社区。审核时应比较这 2 个字段。如果某条记录需要进一步核查,就应保留这个待核查问题,直到解决。
之后比较不同搜索的结果时,查询上下文很重要。一篇帖子即使出现在多份研究采集结果中,也仍需明确关联到找到它的那次搜索。应保留返回的 `inputQuery`,不要依赖文件名或记忆。
使用 `postId` 识别研究记录中的帖子。保留 `canonicalPostUrl`,以便审核者返回原始来源。可用性信息有助于记录来源是否可以核查。如果某个值缺失或不可用,应保留该状态。不要用 0 替代。
这些字段有助于核查研究的来源范围,也就是你为研究选择的社区和搜索设置。它们不能证明帖子与研究相关。要判断相关性,仍需根据研究问题阅读帖子。
运行前先理解总量上限
上限是指一次运行最多可以保存的记录数。Chronometrica 的 `maxResults` 限制的是整次运行保存的不重复帖子总数。它不是每个子版块各自的配额。已核查的输入模式允许的值为 1 到 10,000。Chronometrica 文档与输入模式。
如果指定 2 个子版块,并将 `maxResults` 设为 `12`,计划中应按总共最多保存 12 篇不重复帖子计算。不要按 24 篇计算。也不要假定每个社区都会提供 6 篇帖子。
这个区别会影响研究设计。总量上限可以满足首次审核相关示例的需要。但它不能保证各社区的样本量相等。如果必须保证数量相等,应在采集前明确这一要求,并检查采集计划能否满足。
如果你需要每一篇匹配的帖子,且预计单次运行的结果会超过 10,000 篇不重复帖子,Chronometrica 就无法满足这一单次运行要求。它也不承诺完整覆盖 Reddit。达到上限后,应将已保存的帖子视为受上限限制的样本,而不是所有可用证据。Chronometrica 文档。
结果较少并不能证明不存在其他相关帖子。搜索结果状态、来源可用性、所选查询和社区列表,都会影响你能得出的结论。
从少量且经过核查的输入开始
公开的在子版块中搜索帖子 Task 提供了一个起始预设。Task 是保存好的输入预设。运行前应检查其输入;公开页面的存在并不能证明当前保存的设置已经核实。
此示例使用了已核查的字段名和值:
{
"query": "open source AI",
"subreddits": [
"LocalLLaMA",
"MachineLearning"
],
"maxResults": 12,
"sort": "new",
"time": "month"
}提供的输入通过了依据已留存的公开 JSON Schema 进行的检查。JSON Schema 用于定义允许的输入字段和值。这项检查确认了输入结构符合要求,但不能证明实际搜索会返回帖子。本次比较没有运行采集任务。Chronometrica 输入模式。
将查询和社区名称替换为你计划使用的公开来源。选择工具支持且符合研究要求的时间和排序设置。采集前记录这些设置,以便其他审核者了解你原本打算执行哪种搜索。
例如,审核近期讨论需要明确时间范围。审核有用的示例需要写明相关性规则。即使采集输入很少,也应将这些选择写入研究计划。
虚构示例:保存 12 篇帖子,采纳 9 篇帖子
以下示例为虚构。它不是 Actor 测试、实际数据集或实测客户结果。
一名分析人员研究 2 个指定子版块中有关开源 AI 的讨论。分析人员将不重复帖子的总量上限设为 12。在这项研究中,相关帖子必须讨论使用开源 AI 模型时面临的实际选择。仅顺带提及该短语不符合要求。
这次虚构搜索从一个社区保存了 7 篇不重复帖子,从另一个社区保存了 5 篇:
`7 + 5 = 12 unique saved posts`
分析人员比较 `requestedSubreddit` 与 `matchedSubreddit`,并保留每篇帖子的 `postId`。随后,分析人员阅读全部 12 篇帖子。其中 3 篇包含搜索短语,但没有涉及研究问题。符合要求的有 9 篇:
`12 saved posts − 3 irrelevant posts = 9 accepted posts`
全部 12 篇都可以是有效的搜索结果,但只有 9 篇成为有用证据。采集是否成功与研究相关性是 2 项独立检查。
这个示例也说明了为什么必须仔细理解总量上限。2 个社区合计的上限是 12,而不是 `12 × 2 = 24`。7 比 5 的分布不能证明一个社区比另一个社区更常讨论该主题。它只描述了已保存的样本。
分析人员可以使用这 9 篇已采纳帖子,研究其中的问题和顾虑。但不能仅凭这份小规模关键词样本,就估计这些顾虑在整个 Reddit 上有多普遍。
使用 5 步验收方法
1. 明确问题和来源范围
列明关键词、子版块、计划使用的时间设置和排序设置。然后用一句话定义什么是相关帖子。
有用的相关性规则应明确研究对象和所需证据。“包含我们的关键词”是采集规则。“描述该产品类别的实际问题”则更接近研究规则。应选择有助于你做决定的规则。
在自己的研究笔记中保留一份搜索控制表。记录查询、请求搜索的社区、计划使用的设置、总量上限和采集日期。这份表说明你要求采集工具完成什么工作。它也能防止后来的读者将一次未明确范围的搜索视为完整研究。
2. 选择采集模式
根据所需的记录类型选择产品。对于范围明确的帖子搜索数据集,Chronometrica 文档列出的字段和搜索结果状态符合这套验收方法的需要。Chronometrica 文档。
使用 Trudax 搜索模式时,应清空 `startUrls`,或有意使用符合需求的搜索 URL。其 README 说明,`startUrls` 的优先级高于搜索设置。Trudax 文档。
开始前应检查实际输入。如果输入未能表达你计划执行的任务,即使产品合适,返回的采集结果也可能不合适。
3. 设置上限,并为每篇不重复帖子保留一条研究观察记录
选择你有能力审核的帖子保存总量上限。首次采集的规模应足够小,以便在扩大样本前发现相关性规则中的不明确之处。
每篇不重复帖子保留一条研究观察记录。保留帖子标识符、来源 URL、查询上下文和社区字段。将审核笔记与采集的文本分开保存,以便读者区分来源内容和你的判断。
不要假定各社区的记录行数相等。如果比较需要各组样本量均衡,就应将其列为明确的验收条件。采集后,先检查是否满足条件,再比较各组。
4. 检查搜索结果状态和来源详情
除了帖子记录行,还应阅读每次搜索的结果状态。空结果、部分结果和搜索失败需要分别处理。Chronometrica 文档分别说明了这些状态。Chronometrica 文档。
空结果只说明该次搜索返回了什么。它不能证明没有关于该主题的讨论。对于部分结果,需要明确说明结论的限制。搜索失败则应保持未解决状态,直到你能够评估或重新执行该搜索。
比较请求社区与匹配社区,检查帖子标识符,并保留可用性信息。将尚未解决的搜索保留在搜索控制表中。如果删除这些搜索,就会让已完成采集看起来覆盖了超出证据所支持的范围。
5. 阅读每篇帖子并记录决定
在自己的笔记中使用一组简短的验收代码。例如,使用 `accept`、`reject` 和 `unknown`。这些只是建议分析人员使用的标签,并不表示 Actor 输出中有这些字段。
帖子内容符合相关性规则时,就采纳该帖子。明确不符合规则时,就排除该帖子。如果内容缺失或含义不清,导致无法判断,就使用 `unknown`。添加简短理由,以便他人核查你的判断。
分别报告已保存、已采纳、已排除和未解决的帖子数量。只有核实数量确实为 0 时,才记为 0。缺失值或未知值应明确保留。
这套方法能得到可供审核的样本。它不能让搜索摘要或返回的帖子成为衡量某种情况在整个 Reddit 上有多普遍的依据。如需进一步确定研究边界,请参阅 Reddit 客户研究范围。
先确认样本有用,再增加监测
当你持续重复关键词采集,并根据变化采取行动时,这项工作才成为监测。本次比较未证实自动发送提醒的能力。如果需要通知,应另外添加定时运行和发送步骤。
先确认查询能找到有用的帖子。然后确定采集频率、如何识别已审核的帖子,以及由谁接收已采纳的结果。保留 `postId` 后,流程就能使用帖子标识符与先前的观察记录核对。你的监测流程必须执行这项检查。
为每次定时搜索保留采集结果状态。否则,搜索失败可能会被误认为这段时间没有相关讨论。同样,也应明确保留未知结果。
也应为提醒设置审核规则。某次关键词提及可能值得审核,却不值得立即发送通知。合适的触发标准取决于接收者能采取什么行动。在增加采集量前,先用少量已审核样本检验这一判断。
来源和延伸阅读
作者 Chronometrica · 更新日期
返回顶部 ↑