Skip to main content

Take offline snapshots of any website and restore them locally

Project description

snapshot — offline website snapshots

Take a fast offline copy of any public website, then serve it locally.

Install

Requires Python 3.10+.

pip install web-snapshot-cli

Then run:

snapshot https://example.com ./mirror

Usage

Snapshot a single page

snapshot https://example.com ./mirror

Crawl an entire site

snapshot --crawl https://docs.example.com ./docs --max-pages 200 --depth 4

Save pages as Markdown

snapshot https://example.com ./mirror --lang md

Crawl with filters and politeness

snapshot --crawl --include '/docs/*' --exclude '/docs/drafts/*' \
  --crawl-delay 1 --robots https://docs.example.com ./docs

Authenticated pages

snapshot --cookie session=abc123 --header "Authorization: Bearer TOKEN" \
  https://app.example.com ./mirror

Sitemap-based crawl

snapshot --crawl --sitemap https://example.com ./mirror --max-pages 500

Resume an interrupted snapshot

snapshot --resume --crawl https://example.com ./mirror

Dry run (no writes)

snapshot --dry-run --verbose --crawl https://example.com ./mirror

Extra args (positional)

Any key=value pairs after the output directory are merged into options:

snapshot https://example.com ./mirror crawl=true max-pages=100 lang=html concurrency=32

Restore locally

snapshot -restore ./mirror

This starts a local HTTP server (default http://127.0.0.1:8080) and opens your browser.

snapshot -restore ./mirror --port 3000 --no-open

Options

Flag Description
--crawl, -c Follow same-origin links and download all pages
--lang, -l Output format: html (default) or md
--max-pages Max pages when crawling (default: 50)
--depth Max crawl depth (default: 3)
--no-assets Skip CSS, JS, images, fonts
--timeout HTTP timeout in seconds (default: 15)
--concurrency Parallel downloads (default: 16)
--same-origin / --no-same-origin Restrict crawl to same origin (default: on)
--user-agent Custom User-Agent header
--cookie Cookie as name=value (repeatable)
--header Extra HTTP header (repeatable)
--include Only fetch URLs matching glob (repeatable)
--exclude Skip URLs matching glob (repeatable)
--robots / --no-robots Respect robots.txt (default: on)
--crawl-delay Seconds to wait after each request (default: 0)
--sitemap Seed crawl from sitemap.xml
--resume Skip pages/assets already saved
--verbose, -v Detailed log output
--dry-run Fetch without writing files
-restore DIR Serve a saved snapshot from DIR
--port Port for restore (default: 8080)
--host Host for restore (default: 127.0.0.1)
--no-open Don't open a browser on restore

How it works

  1. snapshot fetches pages with async HTTP (httpx), rewrites links to local paths, and downloads linked assets in parallel.
  2. A .snapshot.json manifest is written to the output folder with metadata for restore.
  3. snapshot -restore serves the saved files and maps / back to the original root page.

Output layout

mirror/
  .snapshot.json
  example.com/
    index.html
    about/
      index.html
    _assets/
      ...

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

web_snapshot_cli-0.2.0.tar.gz (16.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

web_snapshot_cli-0.2.0-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file web_snapshot_cli-0.2.0.tar.gz.

File metadata

  • Download URL: web_snapshot_cli-0.2.0.tar.gz
  • Upload date:
  • Size: 16.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for web_snapshot_cli-0.2.0.tar.gz
Algorithm Hash digest
SHA256 6c35acaea4cb4d95f1984262ba37b8d206c2dc1a7c35112fb766fdfa3e09aa9d
MD5 2d5d1ae87c9fff02c10f80ef79b8de2a
BLAKE2b-256 6406a2ca3b7fa9819e4972e18a933c3a5acba9c8a5c498f606cc9a99951a0d28

See more details on using hashes here.

Provenance

The following attestation bundles were made for web_snapshot_cli-0.2.0.tar.gz:

Publisher: publish.yml on codingsushi79/Snapshot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file web_snapshot_cli-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for web_snapshot_cli-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 57eb8f5b1ae342a9eca2db4e61570d8944b7fda928c471a3e044d97fc499a213
MD5 32e92a2ed5c0fb4e0cd66c08ce1d9f84
BLAKE2b-256 ce60c5daf2c185fae3d71eec84cc1e668a01abe6354b50d988923b0e7369dc12

See more details on using hashes here.

Provenance

The following attestation bundles were made for web_snapshot_cli-0.2.0-py3-none-any.whl:

Publisher: publish.yml on codingsushi79/Snapshot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page