

# 公開 LinkedIn 留言匯出能否代表完整討論？

在把一份 LinkedIn 留言匯出視為完整討論之前，先比較已儲存列數、公開頁面列數、完整度欄位和停止原因。頁面顯示的留言數，與所收集的頂層預覽，計算的可以是不同事物。預覽是公開來源介面上可見的留言。對一則留言的回應，不在這個 Actor 的列範圍內。

頁面顯示的留言數、公開頁面上露出的數量，以及已儲存列數，是三項分開的量度。顯示數量是頁面介面所報告的項目總數。公開頁面露出數量是開放網頁上可見的頂層項目。已儲存列數是 Actor 成功收集到你的資料集的內容。它們的單位可以不同。不要假設顯示數量的組成，也不要對這些數字之間的任何差距斷定一個特定原因，因為原因可以仍然未經證明。

## 理解收集界限

要準確評估一份匯出，你必須理解四個核心詞語：

- 頂層留言：在主文章或動態摘要上直接發佈的留言。
- 回應鏈：在一則現有頂層留言之下發佈的巢狀回應。
- Actor：一個託管的資料收集程式，用來讀取並擷取網頁。
- Task：為收集用 Actor 設定並儲存的一組執行輸入。

Actor 收集網頁上公開露出的資料。如果平台把回應藏在互動選單後面，或需要帳戶登入才顯示完整討論串深度，那些隱藏項目就不在公開頂層匯出的範圍內。

資料集鍵包括 postUrl、postUrn、commentId、commentUrl、text、authorUrl 和 observedAt。這些鍵是你的列證據。輸出物件 OUTPUT.inputResults 包含每個輸入項目的摘要欄位。這些摘要欄位是 status、statusReason、pageCommentCount、publicRowsOnPage、savedRows、isPublicPageComplete、isComplete 和 stopReason。

完整度欄位 isComplete 描述的是這一次特定匯出結果，而不是所有 Task 限制是否已達到。欄位 isPublicPageComplete 描述的是已露出頁面列的擷取，而不是完整對話討論。缺漏的值仍然未知。如果一列缺少 commentId，把它保留為一項分開的未解決觀察。絕不要做空白識別碼合併。

## 逐步驗證匯出覆蓋範圍的方法

按照以下七個步驟，評估公開留言匯出是否符合你的研究需要。

1. 為你的目標指標命名。決定你需要的是已收集的頂層列、公開頁面上露出的列、包含回應的完整討論串，還是不重複留言者的人數（每人只計一次）。
2. 按貼文把輸出資料分組。把每則貼文的摘要鍵與其已收集的資料集列一起存放。不要在同一次執行中把不同貼文的指標混在一起。
3. 先驗證輸入狀態。如果一個輸入狀態顯示失敗或封鎖，不要把它記錄為零留言貼文。把它的數量標為未知。
4. 把已儲存列與停止規則比較。檢查 stopReason 是否等於 max_comments_reached。數字上限會提早停止收集，即使頁面上還有更多可見留言。
5. 按照 publicRowsOnPage、isPublicPageComplete 和 pageCommentCount 的確實定義來比較它們。公開頁面完整度描述的是已露出來源頁面列的擷取。匯出完整度描述的是所得的收集結果。這兩個欄位都不會把頂層樣本變成完整的回應樹。
6. 建立一份覆蓋範圍分類帳。建立一個表格，每則貼文一行。根據每個項目的狀態和限制，為它指定一個純文字決定。
7. 為完整討論串選擇一個已授權的來源。如果你的專案需要完整回應鏈，使用已授權的帳戶整合或官方 API 工具。

目前的預設 Task 輸入把 collectAllAvailable 設為 true，而且沒有數字上限。若要做一次有界限的初次檢查，把 collectAllAvailable 改為 false，並把 maxComments 設為 3。保持 includeAuthorDetails 為 false。

以下是一個有效的 JSON 純文字設定樣本，使用目前已儲存的 Task 輸入，來源是 https://www.linkedin.com/posts/timferriss_how-to-become-dramatically-more-productive-activity-7386884213343428608-wrF3. 把整個 URL 字串換成你已知的公開貼文連結：

```json
{
  "startUrls": [
    "https://www.linkedin.com/posts/timferriss_how-to-become-dramatically-more-productive-activity-7386884213343428608-wrF3"
  ],
  "collectAllAvailable": false,
  "maxComments": 3,
  "includeAuthorDetails": false
}
```

逐步驗證匯出覆蓋範圍的方法

一次已檢查的對照執行顯示：已儲存 3 列、公開露出 4 列、頁面顯示 4 則留言、isPublicPageComplete 等於 true、isComplete 等於 false、stopReason 等於 max_comments_reached。這只證明有界限的收集，不證明完整討論串。

有三個來源值是為示範而虛構的。三則貼文共用同一個虛構觀察時間：

- P1：pageCommentCount 12，publicRowsOnPage 6，savedRows 3，isPublicPageComplete true，isComplete false，stopReason max_comments_reached。狀態是 partial，statusReason 指數字上限停止了這次匯出。決定是有上限的公開頂層樣本；較大的上限可能儲存更多已露出的列，但不保證任何剩餘數量。3 除以 12 的數值比率是 25%，這只是單位不相同的數值比率，不是所有不重複人士的 25%，也不是已證明的對話召回。
- P2：pageCommentCount 20，publicRowsOnPage 5，savedRows 5，isPublicPageComplete true，isComplete true，stopReason 以普通讀者的說法是公開頁面已取盡。狀態是 ok，statusReason 描述公開頁面擷取已取盡。決定是已驗收的露出頁面樣本，不是完整的 20 則留言對話。15 個項目的差距原因未經證明，並不斷定為隱藏回應。
- P3：所有數量未知，來源結果失敗，狀態是 failed，statusReason 是網絡錯誤。決定是收集未知；沒有零留言報告，也沒有分母。

### 虛構分類帳

| 貼文 ID | 狀態 | 狀態原因 | 頁面數量 | 公開列 | 已儲存列 | 頁面完整 | 匯出完整 | 停止原因 | 決定 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| P1 | partial | 數字上限停止了這次匯出 | 12 | 6 | 3 | true | false | max_comments_reached | 有上限的公開頂層樣本 |
| P2 | ok | 公開頁面擷取已取盡 | 20 | 5 | 5 | true | true | 公開頁面已取盡 | 已驗收的露出頁面樣本 |
| P3 | failed | 網絡錯誤 | 未知 | 未知 | 未知 | 未知 | 未知 | 未知 | 收集未知 |

這份分類帳把 P1 的數字上限差距、P2 的來源範圍差距，以及 P3 的失敗檢查分開。已驗收的已儲存列合計等於 3 加 5，得出 8 項觀察。P3 仍然未知，不會當作零加入。讀者可以把 8 列已觀察資料用於一項已說明的公開樣本研究。他們不能聲稱這是 32 人中的 8 人，或全部留言中的 8 則。如果 P1 後來以較高上限儲存 6 列，保留第二個快照，並在合併觀察之前[只以已核對的留言身分去重](/zh-Hant/articles/linkedin-%E8%B2%BC%E6%96%87-%E7%95%99%E8%A8%80-%E5%80%8B%E4%BA%BA%E6%AA%94%E6%A1%88-%E6%AD%A3%E7%A2%BA%E9%80%A3%E6%8E%A5/)。

## 下一步

開啟 Task 預設，位置在[收集公開 LinkedIn 貼文上露出的所有留言](https://apify.com/chronometrica/linkedin-comments-scraper/examples/linkedin-all-publicly-exposed-comments)，使用 [LinkedIn Comments Scraper](https://apify.com/chronometrica/linkedin-comments-scraper) Actor，設定一個小的數字上限，儲存你的輸出欄位，並決定所觀察的公開頁面樣本是否符合你的研究需要。

## 來源與延伸閱讀

- [LinkedIn Comments Scraper Actor](https://apify.com/chronometrica/linkedin-comments-scraper)
- [關於公開留言者資料的 Reddit 討論](https://www.reddit.com/r/webscraping/comments/1d8lc31/how_would_you_scrape_the_linkedin_profiles_of/)