Skip to main content

Capcat - A command-line tool designed to solve content preservation challenges with Ethical Scraping.

v2.0.38 | Python 3.9+ | stayukasabov.github.io/capcat

Captures articles from 12 built-in sources as Markdown files with YAML frontmatter, optional PDF downloads, and self-contained HTML output using an editable theme. Sources, bundles, and global settings are all plain, user-editable YAML, and new sources can be added from any RSS feed. Has an interactive TUI and batch automation.

Installation

pipx install capcat

Requires Python 3.9+.

Quick Start

# Interactive TUI
capcat catch

# Fetch a bundle
capcat bundle tech --count 10

# Fetch specific sources
capcat fetch hn,bbc --count 15

# Archive a single article
capcat single https://example.com/article

# List available sources
capcat list sources

# Show version
capcat --version

Capcat initializes the vault automatically on first run.

Commands

Command Description
catch Launch the interactive TUI
single <url> Archive a single article
fetch <sources> Batch fetch from sources (comma-separated)
bundle <name> Fetch a pre-configured bundle
list sources List all available sources
list bundles List all available bundles
add-source --url <url> Add a custom RSS/news source
remove-source Remove a source
generate-config Generate a YAML config
init Explicitly scaffold vault (runs automatically on first use)

Options

Flag Description
--count N Number of articles to fetch (default: 30)
--output DIR Output directory (default: current dir)
--media Download images, video, audio, and PDF files
--pdfs Download PDF files only (independent of --media)
--html Generate self-contained HTML output
--update Re-fetch and update existing articles
-V, --verbose Verbose output
-q, --quiet Quiet output
-L <file> Log output to file
--version Show version and exit
--help Show help and exit

Bundles

Pre-configured topic collections:

Bundle Sources Description
tech IEEE, Mashable Consumer technology news
techpro HN, Lobsters, InfoQ Professional developer news
ai MIT News, Google Research AI research and developments
science Nature, Scientific American Scientific publications
news BBC, Guardian General news
sports BBC Sport Sports coverage

Available Sources

Tech Pro: Hacker News (hn), Lobsters (lb), InfoQ (iq)

Tech: IEEE Spectrum (ieee), Mashable (mashable)

AI: Google Research (google-research), MIT News (mitnews)

News: BBC (bbc), The Guardian (guardian)

Science: Nature (nature), Scientific American (scientificamerican)

Sports: BBC Sport (bbcsport)

Custom: Medium, Substack (add via capcat add-source)

Output Structure

Batch mode (fetch / bundle)

News/news_DD-MM-YYYY/
├── Hacker-News_DD-MM-YYYY/
│   ├── 01_Article_Title/
│   │   ├── article.md
│   │   ├── comments.md
│   │   ├── html/
│   │   │   ├── article.html
│   │   │   └── comments.html
│   │   └── images/
│   └── 02_Another_Article/
└── BBC_DD-MM-YYYY/

Single article mode

Capcats/cc_DD-MM-YYYY-Title/
├── article.md
├── html/
│   └── article.html
└── images/

HTML output is fully self-contained - embedded CSS, no external dependencies. Open in any browser, share via email, archive permanently.

Configuration

Optional capcat.yml in your project directory:

output_base_dir: "../MyNews"
max_workers: 8
download_media: false

Config priority: CLI flag, TUI prompt, per-source Config/sources/active/<source>/config.yaml, Config/Global-settings.yaml.

Automation

# Daily tech news
0 9 * * * cd ~/news && capcat bundle tech --count 20 --html

# Weekly science digest
0 10 * * 0 cd ~/news && capcat bundle science --count 30 --media

Privacy and Ethics

  • Usernames anonymized as "Anonymous" in comment archives
  • Respects robots.txt
  • Rate limiting: 1 request per 10 seconds
  • Prefers RSS/APIs over HTML scraping
  • No paywall circumvention
  • Proper source attribution

Archive Isolation

Every archived file passes through a content sanitizer before saving. The sanitizer silently removes:

  • Tracking pixels and analytics beacons
  • Embedded scripts and iframes
  • DNS prefetch/preload hints
  • Hidden elements with external references
  • Known tracker domain resources (Google Analytics, DoubleClick, Facebook Pixel, etc.)

Heuristic detection catches unlisted trackers by identifying:

  • 1x1 pixel images
  • Query-heavy image URLs (fingerprinting patterns)
  • URLs with /collect, /pixel, /beacon, /analytics paths
  • Hidden elements containing external references

Article links and source URLs are preserved. The archive is yours to read offline with zero external connections.

Documentation

Full documentation at stayukasabov.github.io/capcat:

Contributing

Open an issue or pull request on GitHub.

License

MIT License - see LICENSE.txt

Metadata

Release files for capcat 2.0.38

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for capcat 2.0.38
File Size Uploaded
capcat-2.0.38.tar.gz 339.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for capcat 2.0.38
File Interpreter ABI Platform
capcat-2.0.38-py3-none-any.whl Python 3 none any Details

Total release size: 771.0 kB

Release files / capcat-2.0.38.tar.gz

Download URL capcat-2.0.38.tar.gz
Size 339.1 kB
Tags Source
SHA-256 checksum
How to use checksums
741cd33c2e73b01e518da9e95cbf2bc2c35db3cc72ba426d6717746729684a8c
BLAKE2b-256 checksum
How to use checksums
9dfc275eb4917591e60b418fb5ca1d1e4883b62fa0602685cceddbc7a3d58aa1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.17

Release files / capcat-2.0.38-py3-none-any.whl

Download URL capcat-2.0.38-py3-none-any.whl
Size 432.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6d1289b0e495e7a1648157973ce794635ce151884f9c0df69ceeb6509d07bb47
BLAKE2b-256 checksum
How to use checksums
99095923304ee3538515ad280070d687310cd4715fff61754ae9eb3febf55418
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.17

Release history Release notifications | RSS feed

This release

2.0.38 This release

2 release files

2.0.37

2 release files

2.0.36

2 release files

2.0.35

2 release files

2.0.34

2 release files

2.0.33

2 release files

2.0.32

2 release files

2.0.31

2 release files

2.0.30

2 release files

2.0.29

2 release files

2.0.28

2 release files

2.0.27

2 release files

2.0.26

2 release files

2.0.25

2 release files

2.0.24

2 release files

2.0.23

2 release files

2.0.22

2 release files

2.0.21

2 release files

2.0.20

2 release files

2.0.19

2 release files

2.0.18

2 release files

2.0.17

2 release files

2.0.16

2 release files

2.0.15

2 release files

2.0.14

2 release files

2.0.13

2 release files

2.0.12

2 release files

2.0.11

2 release files

2.0.9

2 release files

2.0.6

2 release files

2.0.5

2 release files

2.0.4

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.9.97

2 release files

1.9.96

2 release files

1.9.95

2 release files

1.9.94

2 release files

1.9.93

2 release files

1.9.92

2 release files

1.9.91

2 release files

1.9.90

2 release files

1.9.70

2 release files

1.9.69

2 release files

1.9.68

2 release files

1.9.67

2 release files

1.9.66

2 release files

1.9.65

2 release files

1.9.64

2 release files

1.9.63

2 release files

1.9.62

2 release files

1.9.61

2 release files

1.9.60

2 release files

1.9.59

2 release files

1.9.58

2 release files

1.9.57

2 release files

1.9.56

2 release files

1.9.55

2 release files

1.9.54

2 release files

1.9.53

2 release files

1.9.52

2 release files

1.9.51

2 release files

1.9.50

2 release files

1.9.49

2 release files

1.9.48

2 release files

1.9.47

2 release files

1.9.46

2 release files

1.9.45

2 release files

1.9.44

2 release files

1.9.43

2 release files

1.9.41

2 release files

1.9.40

2 release files

1.9.39

2 release files

1.9.38

2 release files

1.9.37

2 release files

1.9.36

2 release files

1.9.34

2 release files

1.9.33

2 release files

1.9.32

2 release files

1.9.31

2 release files

1.9.30

2 release files

1.9.29

2 release files

1.9.28

2 release files

1.9.27

2 release files

1.9.26

2 release files

1.9.25

2 release files

1.9.24

2 release files

1.9.23

2 release files

1.9.9

2 release files

1.9.8

2 release files

1.9.7

2 release files

1.9.6

2 release files

1.9.5

2 release files

1.9.4

2 release files

1.9.3

2 release files

1.9.2

2 release files

1.9.1

2 release files

1.9.0

2 release files

1.8.5

2 release files

1.8.4

2 release files

1.8.3

2 release files

1.8.2

2 release files

1.8.1

2 release files

1.7.2

2 release files

1.7.1

2 release files

1.7.0

2 release files

1.6.8

2 release files

1.6.7

2 release files

1.6.6

2 release files

1.6.5

2 release files

1.6.4

2 release files

1.6.3

2 release files

1.6.2

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.12

2 release files

1.5.10

2 release files

1.5.9

2 release files

1.5.8

2 release files

1.5.7

2 release files

1.5.6

2 release files

1.5.5

2 release files

1.5.4

2 release files

1.5.3

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.28

2 release files

1.4.26

2 release files

1.4.25

2 release files

1.4.24

2 release files

1.4.23

2 release files

1.4.22

2 release files

1.4.21

2 release files

1.4.20

2 release files

1.4.19

2 release files

1.4.17

2 release files

1.4.16

2 release files

1.4.15

2 release files

1.4.13

2 release files

1.4.12

2 release files

1.4.11

2 release files

1.4.10

2 release files

1.4.9

2 release files

1.4.8

2 release files

1.4.7

2 release files

1.4.6

2 release files

1.4.4

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.9

2 release files

1.1.8

2 release files

1.1.7

2 release files

1.1.6

2 release files

1.1.5

2 release files

1.1.4

2 release files

1.1.0

2 release files

1.0.49

2 release files

1.0.48

2 release files

1.0.47

2 release files

1.0.46

2 release files

1.0.45

2 release files

1.0.44

2 release files

1.0.43

2 release files

1.0.42

2 release files

1.0.41

2 release files

1.0.40

2 release files

1.0.39

2 release files

1.0.38

2 release files

1.0.37

2 release files

1.0.36

2 release files

1.0.35

2 release files

1.0.32

2 release files

1.0.31

2 release files

1.0.30

2 release files

1.0.29

2 release files

1.0.28

2 release files

1.0.27

2 release files

1.0.26

2 release files

1.0.25

2 release files

1.0.24

2 release files

1.0.23

2 release files

1.0.22

2 release files

1.0.21

2 release files

1.0.20

2 release files

1.0.19

2 release files

1.0.18

2 release files

1.0.17

2 release files

1.0.16

2 release files

1.0.15

2 release files

1.0.14

2 release files

1.0.13

2 release files

1.0.12

2 release files

1.0.11

2 release files

1.0.10

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page