mrkeyoor.com_
Sun 01 Nov 03:58 UTC
AI Toolsevaluationupdated 01 Oct 2026

Scrapling review

Scrapling is a Python tool for fetching, parsing, and crawling websites through direct HTTP requests or a real browser. It also provides adaptive selectors, cleaned Markdown for RAG, and an MCP server, so one project can grow from a single page request into a resumable crawl or an agent tool.

+1,018stars / 7d
Verdict

Our Scrapling run installed 95 packages and used 440 MB, but the suite ended with 172 failures and 28 errors, so adoption needs a target-specific pilot rather than trust in the feature list. Use it when one Python codebase genuinely needs HTTP fetching, browsers, adaptive parsing, spiders, and MCP access. Choose a narrower parser, Scrapy, or Playwright when you only need one layer of that stack.

We ran it

Lab card: what happened when we ran ScraplingScreenshot of Scrapling (scrapling.readthedocs.io/en/latest)
Install✓ · 117s95 packages · 440 MB
Build✓ · 48s
Tests✗ · 41s502 passed · 172 failed · 28 errors of 702 (pytest)
Known vulns0(pip-audit)
Repo263 files~29,842 lines of source · 4.6 MB · 4 CI workflows · Dockerfile · tests dir

Answers from our run

Does Scrapling build from source?

Dependencies installed in 117 seconds (95 packages), and the build succeeded in 48 seconds. We cloned commit b11da90 into a clean Debian container with 3 CPUs and no project-specific setup.

Do Scrapling's tests pass?

No. The project's own test command finished in 41 seconds and reported 502 passed, 172 failed, 28 collection errors (pytest).

Does Scrapling have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use Scrapling?

Release pipelines that require a green upstream suite: our run ended with 172 failed tests and 28 collection/setup errors.

What are the alternatives to Scrapling?

Scrapy, Crawlee for Python, Playwright for Python. Our Scrapling run installed 95 packages and used 440 MB, but the suite ended with 172 failures and 28 errors, so adoption needs a target-specific pilot rather than trust in the feature list.

Setup2/5117-second install, browser extras, and a failed 702-test run
Docs4/5Clear install split and detailed fetcher, spider, CLI, and MCP guides
Community5/584,951 stars, a September 30 push, and current issue activity
Maturity3/5Wide API and active releases, but our full suite did not pass

Discussed on

  1. hnScrapling: Fast, Adaptive Web Scraping for Python4 points

Who it’s for

Python teams that need HTTP requests, browser sessions, parsing, and crawling behind one API.
Scraping teams whose target pages change structure and who can check every adaptive match.
RAG and agent builders who want cleaned page Markdown or an MCP server.
Long-running crawlers that need throttling, proxy rotation, checkpoints, and streamed results.

Who it’s NOT for

Release pipelines that require a green upstream suite: our run ended with 172 failed tests and 28 collection/setup errors.
Small containers that need a minimal browser stack: our install pulled 95 packages and used 440 MB before the README's separate browser installation step.
Jobs with a hard request deadline against Cloudflare: open issue 468 reports a 15-second timeout taking 74.4 seconds in one solver path.
Teams expecting stealth mode to defeat every protection system: issue 472 reports an Imperva page blocked in plain, browser, and stealth modes.
MCP clients that cannot absorb breaking upgrades: v0.4.15 changed tool names, session behavior, and HTTP authentication.

Setup reality

Our sandbox installed commit b11da90 in 117 seconds, adding 95 packages and using 440 MB. The build passed in 48 seconds. Pytest failed in 41 seconds: 502 tests passed, 172 failed, and 28 hit collection/setup errors out of 702. Pip-audit found 0 known vulnerabilities.

Scrapling requires Python 3.10 or newer. The base package contains the parser, while fetchers, browsers, the shell, RAG helpers, and MCP use optional extras. Browser paths also require scrapling install. Basic parsing and HTTP requests need no service credential; proxies and remote browsers depend on your deployment.

The failure log repeatedly says async test functions are not natively supported, including session, scheduler, robots, and Shopify spider cases. The log does not establish why that support was missing, so we would rerun the relevant test groups in the intended production image before shipping.

One framework covers 5 scraping layers

Scrapling puts HTTP fetching, browser automation, parsing, crawling, and agent access behind one Python project. Fetcher handles ordinary requests, DynamicFetcher drives Chromium or Chrome, and StealthyFetcher adds fingerprint controls and Cloudflare handling. Responses expose CSS, XPath, text, regex, and tree navigation methods. The spider layer then adds concurrency, multiple sessions, throttling, checkpoints, proxy rotation, streaming, and exporters. That breadth is the reason to consider Scrapling: a script can become a crawler without changing its response model.

The same breadth raises the cost of trust. Our b11da90 checkout contained 263 files, about 29,842 lines of source, and occupied 4.6 MB before installation. A team using only stable HTML parsing would take on browser processes, optional dependency groups, session state, and crawl policy it does not need. Start with the cheapest fetcher that gets the right page. Promote a target to a browser only after a saved fixture proves direct HTTP is insufficient.

What happened when we ran it

Our sandbox installed 95 packages in 117 seconds and occupied 440 MB on disk. The build completed in 48 seconds. We ran commit b11da90 in an unprivileged Debian container with 3 CPUs, 8 GB of RAM, Python 3.12, and no secrets. Pip-audit reported 0 known vulnerabilities. Those results cover repository setup, compilation, and the installed Python environment. They do not measure crawl speed, bypass success, memory use under load, or extraction accuracy.

Pytest failed with exit code 1 after 41 seconds. The summary reported 502 passed, 172 failed, and 28 collection or setup errors out of 702 tests. The log tail names failures across scheduler, session, robots.txt, and Shopify spider cases. Its repeated message is plain: async test functions are not natively supported. The supplied tail does not show why the needed async test support was unavailable.

That distinction matters. The result does not prove that Scrapling's async code is broken, and it does not permit us to blame a missing Debian package. It proves that commit b11da90 did not deliver a green full-suite run in our fresh container, despite 502 passing tests. Before adopting the spider layer, reproduce the relevant groups in the exact image you will ship and treat any unexplained setup error as an open release gate.

The base install does not include the fetchers shown up top

Python 3.10 or newer is the documented floor, and pip install scrapling installs the parser rather than the fetcher stack used in the README examples. Fetchers require the fetchers extra followed by scrapling install, which downloads browsers, system dependencies, and fingerprint tooling. Separate extras cover the shell, RAG conversion, MCP, or the whole package. The warning is documented clearly, but it is easy to miss after reading the browser examples first.

Our full environment reached 95 packages and 440 MB before any production crawl data or cache. Basic parsing and ordinary HTTP requests do not need a hosted service credential. A real deployment may still need proxy credentials, a remote CDP browser, persistent crawl storage, and an MCP bearer token. Release v0.4.15 made the MCP HTTP transport bind to localhost and require authentication by default, which is the correct starting posture for a tool that can fetch arbitrary pages.

Adaptive lookup can return plausible data from the wrong element

Scrapling 0.4.15 can save information about a selected element and relocate it after a site changes. That is useful when a product card moves or its classes change. Similarity also creates an awkward failure mode: the replacement can be syntactically valid and semantically wrong. A nearby old price, sponsored result, or mobile-only title may satisfy the selector while corrupting the record. Validate required labels, types, ranges, and item counts after every adaptive match.

The spider framework adds useful controls around that parser. It can pause and resume through checkpoints, tune per-domain delay, obey robots.txt when configured, cache responses for development, and export JSON, JSONL, CSV, or XML. A 10-request concurrency setting is still a policy choice, not evidence that a target permits it. Scrapling's README tells users to respect site terms, robots rules, privacy law, and local scraping law. Put those decisions in shared configuration rather than leaving them to each spider.

Anti-bot support does not cover every protected page

Version 0.4.15 advertises Cloudflare Turnstile handling, yet the current tracker shows concrete boundaries. In issue 468, a user reports that one solver path took 74.4 seconds even with a 15-second fetch timeout. The page eventually loaded, so the problem is an unbounded wall clock rather than a failed fetch. If job deadlines matter, enforce a process-level limit until that path is resolved.

Issue 472 reports a public permit page returning an Imperva incident response in plain HTTP, Playwright, and stealth modes. The reporter had not tried every available fingerprint, proxy, or headful option, so the issue does not establish a universal failure. It does establish that the headline anti-bot capability is not a service guarantee. Test the exact targets you own or are allowed to access, save blocked responses, and keep a manual fallback for sources that change defenses.

The MCP server is secure by default, but v0.4.15 broke compatibility

Release v0.4.15 split 13 MCP tools into one-shot and session modes, renamed get to make_request, and added persistent HTTP sessions. The release calls the change breaking. It also added localhost binding and bearer authentication to the HTTP transport unless an operator explicitly disables them. Existing agent configurations therefore need a reviewed migration rather than an unattended package bump.

GitHub showed 84,951 stars, 6 open issues, and 5 open pull requests on October 1, 2026. The repository was pushed on September 30, while issues 447 and 459 were closed in September. That combination shows current maintenance even though the latest tagged release, v0.4.15, dates to August 23. Scrapling merits a pilot for teams that need its full stack. The pilot should end only when your targets, deadlines, extraction assertions, and selected test groups all pass in the image you will operate.

Alternatives

ProjectWhat it isPick it when
Scrapy gh↗A mature Python crawling framework with middleware, pipelines, scheduling, and selectors.pick this instead when conventional large crawls and an established extension ecosystem matter more than built-in stealth browsers or MCP.
Crawlee for PythonA Python crawler library with HTTP and browser crawlers, request queues, storage, and proxy support.pick this instead when Apify-style queueing, storage, and crawler orchestration fit your deployment.
Playwright for PythonA Python binding for direct browser automation across Chromium, Firefox, and WebKit.pick this instead when browser control is the job and you want to own extraction, retries, and crawl state yourself.

What people are saying

  1. [github-trending] D4Vinci/Scrapling

Sources

  1. Scrapling README
  2. Scrapling v0.4.15 release notes
  3. Tested commit b11da90
  4. Issue 468: Cloudflare solver timeout overrun
  5. Issue 472: Imperva block across fetch modes

More ai tools reviews

pr-agent · agent-sprite-forge · KiroCrew · Orkas · hypit · Paradev · the whole board →