Metadata-Version: 2.5
Name: render-quality
Version: 0.1.0
Summary: Score a rendered web page 0-1 and name why it failed: Cloudflare challenge, WAF block, login wall, empty SPA shell, HTTP error, soft 404. The scorer behind EnConvert's render_quality.
Project-URL: Homepage, https://github.com/enconvert/render-quality
Project-URL: Repository, https://github.com/enconvert/render-quality
Project-URL: Changelog, https://github.com/enconvert/render-quality/blob/main/CHANGELOG.md
Project-URL: Hosted reference implementation, https://enconvert.com
Author-email: EnConvert <support@enconvert.com>
License-Expression: MIT
License-File: LICENSE
Keywords: agents,anti-bot,cloudflare,crawl4ai,firecrawl,jina,llm,login-wall,rag,render-quality,soft-404,web-scraping
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Text Processing :: Markup :: HTML
Classifier: Typing :: Typed
Requires-Python: >=3.10
Requires-Dist: beautifulsoup4>=4.12
Description-Content-Type: text/markdown

# render-quality

Score a rendered web page 0-1 and name why it failed. This is the scorer
behind EnConvert's `render_quality`, as a library. Full documentation, the
deduction table and the JavaScript package live in the repository README:
https://github.com/enconvert/render-quality

```bash
pip install render-quality
```

```python
from render_quality import QUALITY_FLOOR, score

verdict = score(html, status_code=response.status_code)
if verdict.is_blocked or verdict.render_quality < QUALITY_FLOOR:
    log.warning("failed render: %s %s", verdict.deductions, verdict.reasons)
else:
    ingest(html)
```

Adapters: `from_crawl4ai(result)`, `from_firecrawl(scrape_json)`,
`from_jina(markdown, status_code)`. Markdown-only input goes through
`score_text`, which runs the text-based rules and marks the verdict
`html_unavailable`.

Depends on `beautifulsoup4` only. MIT.
