# asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies architecture

> Architecture diagram of the GitHub repository asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies
- Repository: https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies

## Overview

This is a small LinkedIn post-engagement scraper. Its implemented workflow reads post URLs, fetches each page, builds comment/reply records, recalculates relative timestamps, and writes JSON. The README advertises broader pagination, sorting, and batch capabilities, but the sampled parser instead returns hard-coded mock records; those advertised features are not represented as implemented components. Evidence is limited to the README and the sampled source files.

Main entry points: [`src/runner.py`](https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/src/runner.py) (Batch runner), [`src/extractors/linkedin_parser.py`](https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/src/extractors/linkedin_parser.py) (Post parser), [`src/outputs/exporters.py`](https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/src/outputs/exporters.py) (JSON exporter), [`data/inputs.sample.txt`](https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/data/inputs.sample.txt) (Post URL list)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Scraping workflow"]
  node_runner["Batch runner<br/>[runner.py]"]
  node_inputs["Post URL list<br/>[inputs.sample.txt]"]
  node_exporter["JSON exporter<br/>[exporters.py]"]
  node_output["Engagement JSON<br/>[sample_output.json]"]
end

subgraph group_extract["Extraction and formatting"]
  node_parser["Post parser<br/>[linkedin_parser.py]"]
  node_time["Relative time<br/>[utils_time.py]"]
end

node_operator(("Scraper operator"))
node_linkedin["LinkedIn posts"]

node_operator -.->|"starts"| node_runner
node_runner -->|"reads"| node_inputs
node_runner -->|"calls per URL"| node_parser
node_parser -->|"fetches page"| node_linkedin
node_parser -->|"parses timestamps"| node_time
node_runner -->|"exports records"| node_exporter
node_exporter -.->|"writes JSON"| node_output

click node_runner "https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/src/runner.py"
click node_inputs "https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/data/inputs.sample.txt"
click node_parser "https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/src/extractors/linkedin_parser.py"
click node_time "https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/src/extractors/utils_time.py"
click node_exporter "https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/src/outputs/exporters.py"
click node_output "https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/data/sample_output.json"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_runner,node_inputs,node_exporter,node_output toneBlue
class node_parser,node_time toneAmber
class node_operator,node_linkedin toneIndigo
```

## Components

### Scraping workflow

- [Batch runner](https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/src/runner.py): `src/runner.py`
- [Post URL list](https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/data/inputs.sample.txt): `data/inputs.sample.txt`
- [JSON exporter](https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/src/outputs/exporters.py): `src/outputs/exporters.py`
- [Engagement JSON](https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/data/sample_output.json): `data/sample_output.json`

### Extraction and formatting

- [Post parser](https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/src/extractors/linkedin_parser.py): `src/extractors/linkedin_parser.py`
- [Relative time](https://github.com/asia930/linkedin-post-comments-replies-engagements-scraper-no-cookies/blob/main/src/extractors/utils_time.py): `src/extractors/utils_time.py`

### Other components

- **Scraper operator**
- **LinkedIn posts**

## Connections

- Scraper operator → Batch runner: starts
- Batch runner → Post URL list: reads (evidence: `src/runner.py`)
- Batch runner → Post parser: calls per URL (evidence: `src/runner.py`)
- Post parser → LinkedIn posts: fetches page (evidence: `src/extractors/linkedin_parser.py`)
- Post parser → Relative time: parses timestamps (evidence: `src/extractors/linkedin_parser.py`)
- Batch runner → JSON exporter: exports records (evidence: `src/runner.py`)
- JSON exporter → Engagement JSON: writes JSON
