

# LinkedInの公開コメントのエクスポートは、議論全体を表しているか？

LinkedInのコメントのエクスポートを議論全体として扱う前に、保存済み行数、公開ページの行数、完全性を示すフィールド、停止理由を比較してください。画面に表示されたコメント数と、収集したトップレベルコメントのプレビューでは、数えている対象が異なる場合があります。プレビューとは、公開されているソース画面で確認できるコメントのことです。コメントへの返信は、このActorが行として取得する範囲には含まれません。

画面に表示されたコメント数、公開ページで確認できる件数、保存済み行数は、それぞれ別の測定値です。表示件数は、ページの画面が報告する項目の総数です。公開ページで確認できる件数は、一般公開されたウェブページに表示されるトップレベルの項目数です。保存済み行数は、Actorがデータセットへの収集に成功した件数です。これらは数える単位が異なる場合があります。表示件数の内訳を推測したり、数値の差に特定の原因があると断定したりしないでください。原因が証明されていない場合があるためです。

## 収集範囲の限界を理解する

エクスポートを正確に評価するには、次の4つの基本用語を理解する必要があります。

- トップレベルコメント：元の記事や更新情報のフィードに直接投稿されたコメント。
- 返信スレッド：既存のトップレベルコメントの下に、階層構造で投稿される返信。
- Actor：ウェブページを読み取ってデータを抽出する、ホスティング環境で動作するデータ収集プログラム。
- Task：データ収集用のActorに設定し、保存した実行入力のセット。

Actorは、ウェブページ上に公開されているデータを収集します。プラットフォームが操作メニューの内側に返信を隠していたり、スレッドの全階層を表示するためにアカウントへのログインを求めたりする場合、それらの非表示項目は、公開トップレベルコメントのエクスポートの対象範囲に含まれません。

データセットのキーには、postUrl、postUrn、commentId、commentUrl、text、authorUrl、observedAtがあります。これらのキーが、各行の根拠となります。出力オブジェクトOUTPUT.inputResultsには、入力項目ごとの要約フィールドが含まれます。要約フィールドは、status、statusReason、pageCommentCount、publicRowsOnPage、savedRows、isPublicPageComplete、isComplete、stopReasonです。

完全性を示すフィールドisCompleteは、このエクスポート結果自体について示すものであり、タスクのすべての制限を満たしたかどうかを示すものではありません。isPublicPageCompleteは、ページ上に公開されている行の抽出について示すものであり、議論全体を取得したことを示すものではありません。欠損値は不明のままにします。commentIdがない行は、独立した未解決の観測記録として保持してください。IDが空欄であることを理由に行を統合してはいけません。

## エクスポートの取得範囲を検証する手順

次の7つの手順で、公開コメントのエクスポートが調査の要件を満たすかどうかを評価してください。

1. 対象とする指標を明確にします。必要なのは、収集したトップレベルの行、公開ページで確認できる行、返信を含む完全なスレッド、重複を除いたコメント投稿者数のどれなのかを決めてください。
2. 出力データを投稿ごとにまとめます。各投稿の要約キーと、収集したデータセットの行を一緒に保存してください。同じ実行内で、異なる投稿の指標を混在させないでください。
3. 最初に入力項目の処理状態を確認します。失敗やブロックを示している場合は、コメント数が0件の投稿として記録しないでください。件数は不明としてください。
4. 保存済み行数を停止条件と照合します。stopReasonがmax_comments_reachedかどうかを確認してください。ページ上に表示可能なコメントがさらにあっても、件数の上限に達すると収集は途中で停止します。
5. 各フィールドの正確な定義に従い、publicRowsOnPageとisPublicPageCompleteをpageCommentCountと比較します。公開ページの完全性は、ソースページに公開されている行の抽出状況を示します。エクスポートの完全性は、収集結果について示します。どちらのフィールドも、トップレベルのサンプルが返信をすべて含むツリー全体であることを意味しません。
6. 取得範囲の管理表を作ります。1投稿につき1行の表を作成してください。各項目の処理状態と制限に基づき、判定を平易な文章で記入してください。
7. 完全なスレッドを取得する場合は、利用許可のあるソースを選びます。プロジェクトで返信スレッド全体が必要な場合は、正規に許可されたアカウント連携か、公式APIツールを使用してください。

現在のデフォルトのタスク入力では、collectAllAvailableがtrueに設定され、件数の上限はありません。最初に範囲を限定して確認するには、collectAllAvailableをfalseに変更し、maxCommentsを3に設定してください。includeAuthorDetailsはfalseのままにしてください。

以下は、https://www.linkedin.com/posts/timferriss_how-to-become-dramatically-more-productive-activity-7386884213343428608-wrF3 を対象とする、現在保存されているタスク入力を使った有効なJSON形式の設定例です。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でした。この結果が証明するのは、範囲を限定した収集だけであり、議論のスレッド全体を収集したことではありません。

3つのソース値は、説明のために作った架空の値です。3件の投稿には、同じ架空の観測時刻を設定しています。

- P1：pageCommentCountは12、publicRowsOnPageは6、savedRowsは3、isPublicPageCompleteはtrue、isCompleteはfalse、stopReasonはmax_comments_reachedです。statusはpartialで、statusReasonは、件数の上限に達したためこのエクスポートを停止したことを示しています。判定は「件数上限付きの公開トップレベルコメントのサンプル」です。上限を引き上げれば、公開されている行をさらに保存できる可能性がありますが、残りの件数は保証されません。3を12で割った25％という数値は、単位が異なる値どうしの単なる比率です。重複を除いた全人数の25％を意味するものでも、議論の再現率が25％であると証明するものでもありません。
- P2：pageCommentCountは20、publicRowsOnPageは5、savedRowsは5、isPublicPageCompleteはtrue、isCompleteはtrueです。stopReasonは、読者向けの通常の表現では「公開ページで取得可能な項目をすべて取得」です。statusはokで、statusReasonは、公開ページから抽出できる項目をすべて抽出したことを示しています。判定は「公開ページで確認できる項目のサンプルとして採用」です。20件のコメントから成る議論全体ではありません。差分の15件については原因が証明されておらず、非表示の返信だとは断定していません。
- P3：すべての件数は不明で、ソースからの取得は失敗しています。statusはfailedで、statusReasonはネットワークエラーです。判定は「収集状況は不明」です。コメント数を0件とは報告せず、分母にも含めません。

### 架空の管理表

| 投稿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は不明のままとし、0件として加算しません。読者は、公開サンプルを対象とすることを明示した調査に、この観測済みの8行を使用できます。ただし、32人中の8人、または全コメントのうちの8件とは主張できません。後日、P1の上限を引き上げて6行を保存した場合は、2回目の時点の記録を保持してください。観測記録を統合する前に、[同一性を確認済みのコメントだけを対象に重複を除去してください](/ja/articles/linkedin-%E3%83%97%E3%83%AD%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB-%E6%8A%95%E7%A8%BF-%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E6%AD%A3%E7%A2%BA%E3%81%AA%E7%B5%90%E5%90%88/)。

## 次に行うこと

[LinkedIn Comments Scraper](https://apify.com/chronometrica/linkedin-comments-scraper) Actorを使用するTaskのプリセット[LinkedInの公開投稿に表示されるコメントをすべて収集](https://apify.com/chronometrica/linkedin-comments-scraper/examples/linkedin-all-publicly-exposed-comments)を開いてください。件数の上限を小さく設定し、出力フィールドを保存してください。そのうえで、観測した公開ページのサンプルが調査の要件を満たすかどうかを判断してください。

## 出典と参考資料

- [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/)