pagespring
Acquire and normalize online documentation into clean, convertible source files — the acquisition front-end to pagespeak.
Point it at a manual's URL. A pattern recognizes the source type, acquires
the raw pages (stdlib urllib), and normalizes them into ONE clean
HTML/markdown file with absolute asset URLs under incoming/<slug>/. That clean
file is the deliverable; converting it into the finished RAG corpus is a separate
step (pagespeak) that consumes incoming/ on its own — pagespring never runs it.
Lean by design: pf-core[cli] (PyPI) + beautifulsoup4, pyyaml, and pypdfium2 for PDF page counts. Stdlib fetch, no ML stack.
Intended use
pagespring is for publicly available documentation — vendor manuals, help
centers, open textbooks, API specs. It fetches only what the source serves to
any reader: there is no login/session handling, no paywall traversal, and no
bot-detection evasion. It is a polite client: it identifies itself with a
pagespring/<version> User-Agent (PAGESPRING_UA overrides it), honors
429 Retry-After, backs off on server errors, paces crawl requests, and caps
crawl sizes.
It is a user-invoked archiver — closer to "Save Page As" than to an
autonomous crawler. Every source is a URL you supply (one per ingest, or one
per line of an ingest --batch file), and it never discovers sources on its
own, so it does not consult robots.txt (which governs bots that find URLs
themselves).
Before mirroring a site, check its terms of use. What you may do with the
acquired copy (personal RAG corpus, internal search, redistribution) is
governed by the source's license — the deliverable under incoming/ stays on
your machine, and nothing is re-published by this tool.
Install
pip install pagespring
Quick start
pagespring ingest https://docs.tableplus.com # acquire + normalize → incoming/tableplus/
pagespring ingest --batch manuals.txt # one ingest per URL line, with a summary
pagespring renormalize <slug> # replay normalize from kept raw/ — no re-crawl
pagespring refresh --all # re-check every manual against its source
pagespring audit --all # $0 sanity checks on everything staged
pagespring localize <slug> # pull a deliverable's images later (resumable; --all)
pagespring patterns # list the source patterns
pagespring classify <url> # which pattern handles a URL (no fetch; --probe names docs_probe's route)
pagespring status # what's been acquired
Deliverables land in ./incoming/<slug>/ under the directory you run from.
Dev
bin/setup # clone → venv + editable install with dev extras
bin/test # pytest
bin/lint # ruff check + ruff format --check + mypy (strict) + structural gate + framework-first
See docs/usage.md for the full command set and docs/architecture.md for the acquire → normalize flow and how to add a new source pattern.
License
Apache-2.0 — see LICENSE. Releases through 0.11.0 were published under the MIT license and stay MIT.
Metadata
Release files for pagespring 0.13.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pagespring-0.13.0.tar.gz | 363.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pagespring-0.13.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 570.3 kB
Release files / pagespring-0.13.0.tar.gz
| Download URL | pagespring-0.13.0.tar.gz |
|---|---|
| Size | 363.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
128b1e50e1e9fb67f871508ccce4c517431d14dc13d8d418dfa4a0fe47807be9
|
|
BLAKE2b-256 checksum How to use checksums |
6c632d06fddfdcd4de6f4415ced5739a2b37ae1894006075717ce41ece12aa0a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency logRelease files / pagespring-0.13.0-py3-none-any.whl
| Download URL | pagespring-0.13.0-py3-none-any.whl |
|---|---|
| Size | 207.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
eb1755f735adb487cede508486ef36274799995bfa89d8946b889912fc8072e1
|
|
BLAKE2b-256 checksum How to use checksums |
848e4a239e7e1a7972b820325bf557add5aaae5094cf5a427e1b819f30233794
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency log