Skip to main content

domreducer

domreducer is a Python library for programmatically stripping down and sanitizing HTML documents into a minimal, text-focused form. It’s perfect for preparing web pages for LLM ingestion, text analysis, or any context where you only need the essential structural content.


Features

  • Parse a full HTML document into a DOM tree.
  • Strip out non-structural nodes (scripts, style blocks, comments).
  • Strip out non-visual nodes (invisible elements, metadata).
  • Simplify attributes (remove inline styles, classes, IDs where possible).
  • Collapse deeply nested single-child containers.
  • Prune repetitive or boilerplate navigation/footer elements.
  • Reduce large inline SVGs or images to lightweight placeholders.
  • Preserve tables, definition lists, lists, figures, and CSS-styled tables as Markdown.
  • Detect single-page app “JS shells” and abort reduction so you can fall back to a JS-enabled fetch.
  • Minify remaining whitespace.

All steps are tracked in a ReduceOperation result, which includes before/after sizes, token counts, and any reasons for aborting.


Installation

pip install domreducer

Quickstart

from domreducer import HtmlReducer

raw_html = "<html>…your full page…</html>"

# Run the full reduction pipeline (aborts if a JS shell is detected)
op = HtmlReducer(raw_html).reduce()

if not op.success:
    print("Reduction aborted:", op.error or op.js_method_needed)
else:
    print("Original size:", op.total_char, "chars")
    print("Reduced size:", op.reduced_char, "chars")
    print("Steps details:", op.reduction_details)
    clean_html = op.reduced_data
    # …use clean_html…

Custom Pipeline

Choose only the steps you want or disable JS-shell abort:

op = HtmlReducer(raw_html).reduce(
    order=[
        "parse_the_full_dom_into_a_dom_tree",
        "strip_out_non_structural_nodes",
        "simplify_attributes",
        "minify_whitespace",
    ],
    abort_on_js_shell=False,
)

API Reference

HtmlReducer(html: str)

Constructor takes your raw HTML string.

.reduce(order: List[str] = None, abort_on_js_shell: bool = True) → ReduceOperation

  • order: list of step names (in the order to apply). Defaults to the full pipeline.
  • abort_on_js_shell: if True, calls .is_probably_js_shell() after parsing and returns an aborted ReduceOperation.

Available steps (in pipeline order):

  1. parse_the_full_dom_into_a_dom_tree
  2. strip_out_non_structural_nodes
  3. strip_out_non_visual_nodes
  4. simplify_attributes
  5. collapse_deeply_nested_container_with_one_child
  6. prune_repetitive_and_boilerplate_navigation_items
  7. reduce_large_inline_SVGs_or_images_to_lightweight_placeholders
  8. preserve_tables_as_markdown
  9. preserve_deflists_as_markdown
  10. preserve_lists_as_markdown
  11. preserve_figures_as_markdown
  12. preserve_css_tables_as_markdown
  13. strip_tailwind_utility_classes
  14. drop_row_ids_inside_large_tables
  15. minify_whitespace

ReduceOperation

The object returned by .reduce(), with attributes:

  • success: bool — True if reduction ran through; False if aborted (e.g. JS shell) or error.
  • error: Optional[str] — any error message.
  • js_method_needed: bool — True if aborted due to JS-shell detection.
  • total_char: int — character length before reduction.
  • total_token: int — approximate token count before reduction.
  • reduced_char: int — character length after reduction.
  • reduced_token: int — approximate token count after reduction.
  • raw_data: str — original HTML.
  • reduced_data: str — the cleaned, reduced HTML.
  • reduction_details: dict — per-step Δchars/Δtokens, and any flags like "aborted": "js_shell_detected".

Contributing

  1. Fork the repo
  2. Create your feature branch (git checkout -b my-feature)
  3. Commit your changes (git commit -am 'Add feature')
  4. Push to the branch (git push origin my-feature)
  5. Open a Pull Request

Metadata

Release files for domreducer 0.0.4

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

Source distribution (sdist)

Source distribution for domreducer 0.0.4
File Size Uploaded
domreducer-0.0.4.tar.gz 10.6 kB Details

Built distribution (wheel)

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

Total release size: 20.7 kB

Release files / domreducer-0.0.4.tar.gz

Download URL domreducer-0.0.4.tar.gz
Size 10.6 kB
Tags Source
SHA-256 checksum
How to use checksums
2a566c7dd47c0d02fa6fd17e1eb589df2ac6747cf25c4160b554c18d478e9baf
BLAKE2b-256 checksum
How to use checksums
471bc352ff1da6ee278d15a040b1adfd3e68f8e280edf3cdd12d8ba5e88fc357
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release files / domreducer-0.0.4-py3-none-any.whl

Download URL domreducer-0.0.4-py3-none-any.whl
Size 10.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f1ebc65f0e568766e7012a43f90b7aa0c75a49ec05d424bd9a45e42ff153cb17
BLAKE2b-256 checksum
How to use checksums
c9cc5c3d88df9711b4aeaf54919c5390a5650ff64eff9d7241d708cc3b76a574
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release history Release notifications | RSS feed

This release

0.0.4 This release

2 release files

0.0.3

2 release files

0.0.1

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