
Apify 的 Facebook Comments Scraper 也能将公开评论和回复导出到 Excel。如果它现有的集成或文档所述的 3 层评论结构符合你的需求,就选择它。Apify 文档。
首先要确定电子表格必须包含什么。“导出这个讨论串”这样的目标仍有关键问题未明确:回复是否计入上限、如何保留回复关联,以及文件应包含哪个日期范围的内容。
本次对比使用了于 2026 年 10 月 20 日核查的公开文档。推荐依据是这些文档记载的控制选项。有关价格、速度、准确性或可靠性的主张,均无双方直接对比的采集测试作为支持。
Actor 是托管运行的数据采集程序。本文讨论的 2 款产品都是 Apify 上的 Actor。Task 是保存好的输入预设,可帮助你从已知配置开始运行。
对比影响 Excel 文件的控制选项
用此表将采集控制选项与你的文件要求逐项对照。
| 要求 | Chronometrica(文档) | Apify(文档) |
|---|---|---|
| 保存行数上限 | `maxResultsPerPost` 将保存的评论和回复合并计数 | 嵌套回复可能使结果数量超过请求数量 |
| 回复结构 | 包含父评论和根评论 ID;保存回复时,必须同时保存其父评论和根评论 | 导出回复及讨论串深度,最多支持 3 层 |
| 采集日期范围 | 包含开始和结束日期当天 | 可输入开始日期;结束日期可在 Excel 中筛选 |
| 现有工作流程 | 公开 Task 提供小规模导出配置 | 支持 Excel 导出和官方 Make 集成 |
这些控制选项配合使用,使 Chronometrica 适合上述需求。每篇帖子的行数上限有助于界定保存样本的大小。父评论和根评论 ID 可保留回复结构。开始和结束日期让你能在采集前确定时间范围。Chronometrica 文档。
父评论 ID 用于标识某条回复直接回应的评论。根评论 ID 用于标识该回复串起点的顶层评论。当你需要查看某条回复针对哪条发言时,这些关联很重要。
使用能满足实际要求的控制选项。如果你只需要一个供人工阅读的小文件,日期范围可能没有额外价值。如果文件用于特定时期的报告,就应在采集数据行之前定义该时期。
明确每行数据代表什么
运行任一 Actor 前,先写一份简短的采集计划。这样就有明确依据来检查导出结果。
- 明确来源。保留每篇目标帖子的直接内容 URL。在未登录的状态下打开它,确认访客能阅读你需要的评论。
- 选择分析单位。说明你分析的是单条评论、回复、账号,还是完整对话。这些是不同的单位。
- 设置上限。写明每个内容 URL 最多保存多少行。说明此上限是否包含回复。
- 定义时间范围。仅在问题需要时使用日期范围。如果需要起止日期明确的时期,就记录开始和结束日期。
- 定义文件检查项。说明导出后必须保留哪些 ID 和回复关联。
一行评论数据是一条已保存的评论或回复。它不代表一个人。一个账号可以发表多条评论,而且公开的作者名称并不是个人的唯一标识。
一行数据也不代表一段完整对话。一条顶层评论及其多条回复可能占用多行。因此,设置行数上限的样本中,完整对话的数量可能比仅看行数时预想的更少。
这一区别会影响你对文件的解读。如果报告需要统计已保存的发言数量,就统计评论行数。如果需要统计账号数量,就另外定义账号统计方法,并说明现有公开作者数据的局限。不要把总行数当作总人数。
Chronometrica 仅采集无需登录即可查看的评论。私密帖子和仅好友可见的帖子不在采集范围内。请提供受支持的内容 URL,而不是公共主页、个人主页、小组、快拍或动态消息页的 URL。小组内的帖子仍须符合受支持 URL 和公开访问规则。Chronometrica 文档。
选择行数上限和日期规则
Chronometrica 的 `maxResultsPerPost` 接受 1 至 10,000 的值,默认值为 500。它限制每个输入内容 URL 保存的评论和回复总行数。`includeReplies` 默认关闭回复采集。如果样本需要包含回复,就将其开启。Chronometrica 文档。
根据计划开展的工作选择上限。第一个文件应足够小,便于逐行检查。该文件通过检查后,再根据分析计划提高上限。
将行数上限与运行费用上限分开处理。如果两者都使用,就分别记录。不要把费用上限当作运行一定会生成某个行数的保证。
采集首个样本时,将 `collectAllAvailable` 保持为 `false`。将其设为 `true` 会取消数量上限。检查输入和导出流程是否正常,无需更改此设置。Chronometrica 文档。
如果需要包含起止日期的日期范围,就使用 `commentsFrom` 和 `commentsUntil`。“包含”是指指定的边界日期也属于该范围。启用日期筛选时,Chronometrica 会跳过日期未公开的评论。回复还需要有一条已保存且处于该日期范围内的父评论。Chronometrica 文档。
这条日期规则会改变样本。如果报告要求特定日期范围,且你接受这些排除条件,就设置日期范围。如果首要任务是在不受该限制的情况下检查可获取的数据行,就省略日期字段。
将此选择写入采集计划。后续读者应能判断,某行缺失是否可能源于日期规则、行数上限或其他采集范围限制。
使用已发布的 Task 采集小样本
从将 Facebook 评论导出为 CSV 或 Excel 的 Task 开始。它为导出流程提供了已保存的初始配置。
以下输入使用当前已发布的输入结构。请将示例 URL 替换为目标公开帖子的 URL。这是输入示例,不是采集结果。
{
"startUrls": ["https://www.facebook.com/reel/1733966934399341"],
"maxResultsPerPost": 25,
"includeReplies": true,
"commentSortMode": "all",
"collectAllAvailable": false
}此配置为输入的内容 URL 设置了最多保存 25 行的上限,回复也计入此上限。它使用受支持的输入字段,并为本次样本开启回复采集。Chronometrica 文档。
扩大样本前,先用小样本检查采集流程:
- 替换 URL,并确认行数上限。
- 使用这份小规模输入运行 Task。
- 查看 `OUTPUT` 中的输入失败信息和停止原因。
- 保存未经修改的 JSON 导出文件和运行摘要。
- 根据已保存的结果创建 Excel 工作文件。
Chronometrica 在 `OUTPUT` 中报告输入失败信息和停止原因。它不会把这些消息作为虚假的评论行插入结果。即使评论文件中已有数据行,也要检查该记录。Chronometrica 文档。
保存的 JSON 可供后续检查时对照。如果某个值在导入电子表格时发生变化,你可以将其与原始导出值比较。将运行摘要与 JSON 一起保存,以便同时保留数据行和采集停止的原因。
Apify 数据集支持 JSON 和 Excel 导出。数据集是一次运行所保存的结果行集合。你可以保存 JSON 作为对照,并使用 Excel 文件作为工作副本。Apify 数据集文档。
导入文件时保留原始 ID
ID 用于关联电子表格中的数据行。在排序、筛选或添加分析列之前,先确保 ID 得到保留。
Chronometrica 的数据行包含 `commentId`、`isReply`、`parentCommentId`、`rootCommentId`、`publishedAt` 和 `scrapedAt`。此外还有评论文本、公开作者字段和表态字段。`scrapedAt` 记录采集时间。Chronometrica 文档。
按以下方法导入:
- 保留原始导出文件。在副本中操作,以保留来源中的原始值。
- 将 ID 列设为文本。将 `commentId`、`parentCommentId` 和 `rootCommentId` 作为标识符保留,不要转换为数值。
- 检查日期和缺失值。将它们用于筛选或计算前,先与 JSON 对照文件核查。
- 在单独的列中添加分析内容。保留来源字段,以便复核。
对于 CSV 文件,Microsoft 文档介绍了“数据 > 获取和转换数据 > 从文本/CSV”路径,以及“转换数据”选项。采用可控制字段类型的导入方式,在加载前将 ID 列设为文本。这样就无需依赖 CSV 自动格式设置,可按要求将相关列保留为文本。不同 Excel 版本的菜单布局可能不同。Microsoft 文本和 CSV 导入指南。
让未知值保持未知。公开来源可能缺少计数、日期和身份信息。表态次数缺失并不表示表态次数为 0。日期缺失也不表示日期较早。不要用会改变其含义的值替换这些缺失值。
同样的规则也适用于作者字段。保留返回的公开值,但不要仅凭显示名称相同,就认定 2 行数据来自同一个人。
扩大采集规模前,先检查已保存的样本
文件能在 Excel 中打开,仍然需要检查。根据采集计划检查数据行及其关联。
- 统计保存的行数。将总行数与设定的上限及记录的停止原因对照。
- 统计去重后的评论 ID 数量。“去重”是指每个不同的 ID 只计数一次。如果行数与去重后的 ID 数量不同,应先查明原因,再决定是否将每行视为一条独立评论。
- 检查回复引用。对每条回复,确认每个非空的 `parentCommentId` 和 `rootCommentId` 都存在于已保存的 `commentId` 值中。
- 检查导入结果。将 ID 字符串及选取的日期值与未经修改的 JSON 对照。
- 记录采集范围限制。说明采集是因达到上限而停止,还是因其他已报告的原因而停止。将来源 URL 和采集时间与这份说明一起保存。
非空引用包含一个值,而不是空引用。如果该值指向文件中不存在的数据行,说明保存的文件未通过关联检查。请查明原因。不要为了通过检查而创建父评论行,或补写缺失的评论文本。
有数量上限的运行得到的是样本。即使一次运行已采集到可获取来源的末尾,也不能证明 Facebook 提供了全部评论。两款产品都无法据此确认已完整采集 Facebook 显示的所有内容。除非有证据表明两个计数描述的是同一组公开内容,否则不要用已保存行数除以 Facebook 显示的计数,并将结果称为“总覆盖率”。
这些检查可以支持一个有用且范围更明确的结论:保存的文件符合设定的行数规则,保留了原始 ID,并且回复引用有效。这足以帮助你决定,是否为既定任务扩大采集规模。
如果下一步是分析反馈,请继续阅读导出 Facebook 评论并分析客户反馈。该指南介绍了在选定并检查导出流程后,如何使用这些数据行。
虚构的决策示例
以下整个示例均为虚构。一位分析人员已经选定了 2 篇公开帖子。每篇帖子最多需要保存 100 行,包含回复。每条回复都必须保留与父评论的关联。报告还要求设置开始和结束日期,且包含这两个日期当天。分析人员接受排除日期无法获取的评论。
Chronometrica 符合这些控制要求。分析人员将 `maxResultsPerPost` 设为 100,开启回复采集,保留数量上限,并提供所需的开始和结束日期。对于 2 个不同的内容项,在来源限制影响结果之前,设定的保存总行数上限为 200。Chronometrica 文档。
假设某个已保存的样本包含 70 条顶层评论和 30 条回复。它有 100 行评论数据。它并不代表 100 个人或 100 段完整对话。
分析人员检查已保存的 ID。如果每条回复的父评论和根评论都存在于文件中,样本就通过了关联检查。此结论仅针对已保存的样本,不能证明来源中的整个讨论串已被完整采集。分析人员保留 JSON 和摘要,然后准备 Excel 工作副本。
如果要求改变:分析人员已在使用 Apify 官方 Make 模块,希望采用其 3 层导出结构,然后在 Excel 中筛选日期。此时,Apify 可能更适合现有操作流程。Apify 文档。
如果实际要求是获取每一条私密评论,这 2 款公开数据 Actor 都不适用。必须先调整采集要求,本次对比才能帮助你做出合适的选择。
来源和延伸阅读
作者 Chronometrica · 更新日期
返回顶部 ↑