

# 如何从说明文字和首条评论采集 Instagram 话题标签

采集已知帖子的顶层评论文本，核对哪条评论属于帖子所有者，然后再提取话题标签。Actor 是托管的数据采集程序。Task 是已保存的输入预设。Actor 采集源数据行，分析由你来做。

## 采集步骤

1. 选定一条已知帖子，并保留其 URL 或短代码。把公开来源中的当前说明文字复制到单独的说明文字字段，并记下观察时间。评论 Actor 不提供说明文字。不要使用以往研究中的旧端点。
2. 作为试点，按默认顺序跑一个小样本，将 `maxCommentsPerPost` 设为 `3`。将 `postUrls` 设为你已知的公开帖子或 Reel URL，将 `collectAllAvailable` 设为 `false`，将 `commentSortMode` 设为 `default`。检查目标身份、文本和 `OUTPUT`。`savedRows` 和 `cappedTargets` 是本次运行的合计。目标条目包含每个目标的 `resultState`、`sampleHealth` 和 `stopReason`。已核对的当前 3 行上限对照只核实来源身份、文本和日期。它不能证明已找回所有者评论，也不能证明按时间顺序的第一条评论。不要因为提高上限就承诺会有所有者评论。只对有理由的已知帖子提高上限。如果公开样本隐藏了所需评论，就把首条评论的标签证据标为未知，并人工查看该公开帖子。
3. 从源帖子识别所有者账号。在存在 `ownerId` 时进行匹配，因为[仅用户名就可能改变](/zh-Hans/articles/%E5%88%9B%E4%BD%9C%E8%80%85%E5%90%8D%E5%8D%95-instagram%E4%B8%BB%E9%A1%B5%E5%8E%BB%E9%87%8D/)。一条提及创作者的评论并不是创作者所写。作者匹配含糊时，保持为未解决。
4. 保留每条候选的、由所有者撰写的评论的 `commentId`、`text`、`createdAt`、`ownerId`、`ownerUsername`、`ownerVerified`、`likesCount`、`repliesCount`、`collectedAt` 和来源 URL。注意 `repliesCount` 是显示的计数，不是回复导出。人工核对它是否为预期的初始话题标签评论。按最旧优先只会排序已采集的公开样本。它不能确定真正的第一条评论。不要把不确定的候选标为第一条。
5. 提取可见的话题标签词元，保留原始拼写，并另外生成一个大小写折叠后的比较键。使用明确的词元规则。对英语，接受井号后接字母、数字或下划线。标点结束该词元。其他文字体系需要相应的规则和人工核对。排除用户提及、电子邮件地址和单独的井号。
6. 建立来源表。包含帖子键、评论键或说明文字来源、作者核对、原始标签、规范化键、`collectedAt` 和状态。不要把其他用户的标签与所有者的标签混在一起。
7. 比较说明文字标签键与已核对的所有者评论标签键。报告仅说明文字、仅评论和共有集合。不可用的所有者评论证据不得纳入空集这一断言。这显示的是观察到的标签放置，不是触达的证明。

## 虚构演算示例

下面是一个原创虚构示例，用来说明这张表如何工作。虚构帖子 P1 的说明文字是 "Garden notes #LeafCare #HomeGarden." 一条已核对的所有者评论 C1 写道 "More tags: #HomeGarden #SoilMix #LeafCare #SoilMix." 另一个账号 C2 写道 "Nice #PlantSale."

所有者身份与 C1 匹配，并且已在公开帖子上核对其初始位置。说明文字集合包含 leafcare 和 homegarden。所有者评论集合包含 homegarden、soilmix 和 leafcare。共有标签是 leafcare 和 homegarden。仅评论的是 soilmix。仅说明文字的集合为空。

说明文字和评论中的 6 次话题标签出现，变成 3 个不同的所有者使用键。重复的 soilmix 出现仍留在来源数据中。来自 C2 的 plant sale 标签被排除在所有者使用集合之外，但仍留在源数据中。如果另一次运行看不到 C1，应说所有者评论标签不可用，而不是说所有者没有使用评论话题标签。

在下表中，「人工帖子所有者匹配」一列对应 `Manual post-owner match`，是读者所做的核对：评论的 `ownerId` 是否与拥有该帖子的账号匹配。原生的 `ownerVerified` 是公开徽章字段，不是帖子所有权的证明。虚构数据未提供徽章值，因此保留为未知。表中的「有效」和「排除」对应 `Active` 和 `Excluded`，表示读者的审阅决定，不是原生数据集状态，因为该 Actor 没有数据集状态字段。原生的 `postUrl`、`postId` 和 `postShortCode` 会保留在每一条实际来源行中；虚构使用读者帖子键 P1，未提供的真实 URL 和标识符标为未知，而不是编造。

| 帖子键 | 帖子 URL | 帖子 ID | 帖子短代码 | 来源 | 人工帖子所有者匹配 | 原始标签 | 规范化键 | 采集时间 | 状态 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| P1 | 未知 | 未知 | 未知 | 说明文字 | 真 | #LeafCare | leafcare | 2026-10-13 | 有效 |
| P1 | 未知 | 未知 | 未知 | 说明文字 | 真 | #HomeGarden | homegarden | 2026-10-13 | 有效 |
| P1 | 未知 | 未知 | 未知 | C1 | 真 | #HomeGarden | homegarden | 2026-10-13 | 有效 |
| P1 | 未知 | 未知 | 未知 | C1 | 真 | #SoilMix | soilmix | 2026-10-13 | 有效 |
| P1 | 未知 | 未知 | 未知 | C1 | 真 | #LeafCare | leafcare | 2026-10-13 | 有效 |
| P1 | 未知 | 未知 | 未知 | C1 | 真 | #SoilMix | soilmix | 2026-10-13 | 有效 |
| P1 | 未知 | 未知 | 未知 | C2 | 假 | #PlantSale | plantsale | 2026-10-13 | 排除 |

## 下一步

使用 [Instagram Comments Scraper](https://apify.com/chronometrica/instagram-comments-scraper) Actor 和预设 [Task](https://apify.com/chronometrica/instagram-comments-scraper/examples/instagram-comments-scraper) 输入运行试点样本，先采集顶层评论行，再核对标签来源。

## 来源和延伸阅读

- [Instagram Comments Scraper Actor](https://apify.com/chronometrica/instagram-comments-scraper)
- [Instagram Comments Scraper Task](https://apify.com/chronometrica/instagram-comments-scraper/examples/instagram-comments-scraper)
- [历史研究问题](https://www.reddit.com/r/webscraping/comments/aefai8/how_can_i_webscrape_instagram_hashtags_that_are/)