scrapalyser
Pre-scraping intelligence tool. Scan any website before writing a single line of scraper.
Install
# Core (curl_cffi engine)
pip install scrapalyser
# With Playwright support
pip install scrapalyser[playwright]
playwright install chromium
Usage
import scrapalyser
# Simple scan — returns a dict
report = scrapalyser.scan("https://example.com")
print(report)
# Full options
report = scrapalyser.scan(
url="https://example.com",
output="txt", # "json" (default) or "txt"
lang="fr", # "en" (default), "fr", "es", "br"
save="report.txt", # optional — write output to file
engine="curl", # "curl" (default) or "playwright"
headless=True, # True (default) or False — playwright only
screenshot="shot.png", # optional — playwright only
)
Example output
JSON
{
"url": "https://example.com",
"scanned_at": "2026-05-19T12:32:00Z",
"status_code": 200,
"engine": "curl",
"antibot": {
"detected": true,
"name": "Cloudflare Turnstile"
},
"technology": {
"type": "React"
},
"js_required": true,
"api": {
"detected": true,
"endpoints": [
"https://api.example.com/v1/search"
]
},
"robots_txt": {
"found": true,
"url": "https://example.com/robots.txt"
},
"sitemap": {
"found": true,
"url": "https://example.com/sitemap.xml"
},
"login_wall": {
"detected": false,
"type": null
}
}
TXT (French)
═══════════════════════════════════════════
SCRAPALYSER RAPPORT
https://example.com
Scanné le : 2026-05-19T12:32:00Z
Status : 200
═══════════════════════════════════════════
[ANTI-BOT]
⚠️ Détecté : Cloudflare Turnstile
[TECHNOLOGIE]
🖥️ Type : React
[JAVASCRIPT]
⚠️ JS requis : Oui → utiliser Playwright/Selenium
[API DÉTECTÉES]
✅ https://api.example.com/v1/search
[ROBOTS.TXT]
✅ https://example.com/robots.txt
[SITEMAP]
✅ https://example.com/sitemap.xml
[LOGIN WALL]
✅ Aucun login requis
═══════════════════════════════════════════
Features
- 🛡️ Anti-bot detection — Cloudflare, DataDome, PerimeterX, Akamai, Kasada, Imperva, Sucuri, reCAPTCHA, hCaptcha + Unknown/Custom antibot detection
- 🖥️ Technology detection — React, Vue, Angular, Next.js, Nuxt, Svelte, WordPress, Shopify, Drupal, Joomla, Wix, Webflow
- ⚡ JS requirement detection — know before you write whether
requestsis enough or Playwright is needed - 🌐 API endpoint discovery — via CSP headers, inline scripts, and XHR/Fetch interception (Playwright mode)
- 🤖 robots.txt parser — URL extraction with common path variants (
/robot.txt,/robots.txt) - 🗺️ Sitemap detection — via robots.txt or direct probe (
/sitemap.xml,/sitemaps.xml...) - 🔐 Login wall detection — form, redirect, button, OAuth
- 📸 Screenshot — capture the page as seen by the browser (Playwright mode)
- 🚫 Blocked by antibot — if the site blocks you, all fields return
"blocked by antibot"instantly - 🌍 Multi-language output — fr, en, es, br
- 📄 JSON & TXT export — machine-readable or human-readable
Engines
| Feature | curl |
playwright |
|---|---|---|
| Speed | ⚡ Fast | 🐢 Slower |
| JS execution | ❌ | ✅ |
| XHR/Fetch API detection | ❌ | ✅ |
| Screenshot | ❌ | ✅ |
| Bot bypass | Partial | Better with headless=False |
Anti-bot detection
When the site blocks you (403, captcha page), scrapalyser reports which antibot is responsible
and marks all other fields as "blocked by antibot" — so you know exactly what you're up
against before writing anything.
Supported:
| Solution | Detection method |
|---|---|
| Cloudflare / Turnstile | cf-ray header, __cf_bm cookie |
| DataDome | x-datadome header, datadome cookie |
| PerimeterX | _px cookie, script patterns |
| Akamai | ak_bmsc / bm_sz cookies |
| Kasada | kkrta / kasada.io scripts |
| Imperva | x-iinfo header, incap_ses cookie |
| Sucuri | x-sucuri-id header |
| reCAPTCHA | script pattern |
| hCaptcha | script pattern |
| Unknown / Custom | suspicious headers, cookies, obfuscated scripts |
Contributing
- Fork the repo
- Create a feature branch (
git checkout -b feat/my-feature) - Commit your changes
- Open a pull request
License
MIT — see LICENSE.
Metadata
Release files for scrapalyser 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| scrapalyser-0.1.2.tar.gz | 15.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| scrapalyser-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 33.5 kB
Release files / scrapalyser-0.1.2.tar.gz
| Download URL | scrapalyser-0.1.2.tar.gz |
|---|---|
| Size | 15.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1591c2c90d8ea2ef9f66ac8e4e1763e386002bac7212504c2f793487517a5cbc
|
|
BLAKE2b-256 checksum How to use checksums |
1248a90a3582ff99d8763488c39cd6602845ef6dc22cff38c0deccadc8e187be
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.4
|
Release files / scrapalyser-0.1.2-py3-none-any.whl
| Download URL | scrapalyser-0.1.2-py3-none-any.whl |
|---|---|
| Size | 17.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
00e9d486e1659656b8f7e63e65dc3a45cec2bcff759116b3edfa4a58c2cbbf4e
|
|
BLAKE2b-256 checksum How to use checksums |
f6f3b1d8ecb617804ef34aade6a0a17af2522f7294b4dae7b2fa75939f6dcff8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.4
|
Security for scrapalyser 0.1.2
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.