Scrapling is a free, open source data extraction & web scraping project written in Python and released under BSD-3-Clause. It has 81,798 GitHub stars, 8,307 forks and 6 open issues, and was last pushed 3 days ago. On this registry it ranks #2 of 45 tracked projects in Data Extraction & Web Scraping, with 5 head-to-head comparisons available. It gained 651 stars over the last 3 tracked days.

What is Scrapling?

Scrapling is an adaptive Python web scraping framework for developers, data teams, and regular users who need anything from a single request to a full-scale crawl without rewriting selectors every time a site changes.

What it is

Scrapling is an open-source Python framework for web scraping that spans the whole range from one fetch to a concurrent crawl. Its parser learns from website changes and automatically relocates your elements when pages update, so a selector that worked before a redesign can still find the same data afterward. Its fetchers are built to bypass anti-bot systems such as Cloudflare Turnstile out of the box, and its spider framework scales to concurrent, multi-session crawls with pause and resume, automatic proxy rotation, and a crawl speed that adapts to how fast each website responds and backs off when the site starts blocking.

The problem it solves is the maintenance loop that follows any scraping project: hand-written CSS and XPath selectors break on layout changes, and the surrounding plumbing for headless browsers, proxy rotation, retries, and pacing is usually written from scratch. Scrapling assembles those pieces into one library in the Python ecosystem, exposing a Spider API modelled on the familiar Scrapy pattern alongside its own fetchers and an MCP server for agent workflows.

Key capabilities

  • Four fetchers cover different targets: Fetcher, AsyncFetcher, StealthyFetcher, and DynamicFetcher, with options such as headless=True and network_idle=True on StealthyFetcher.fetch.
  • Adaptive element tracking works through p.css('.product', auto_save=True) at first scrape and adaptive=True later, after the website structure changes.
  • The spider framework is imported as from scrapling.spiders import Spider, Response, and a crawl is defined with name, start_urls, and an async def parse method, then started with MySpider().start().
  • Crawls run concurrently across multiple sessions with pause and resume, automatic proxy rotation, real-time stats, and streaming output.
  • Crawl speed adapts to each website's response speed and backs off automatically when blocking begins.
  • Cloudflare Turnstile is handled out of the box, without additional services.
  • A CLI and an MCP server are included, matching the project's mcp, mcp-server, and cli topics.

Who uses it and how

  • Individual users who need a single request or a small scrape and want session handling and anti-bot bypass without assembling their own stack.
  • Data teams running full crawls that must pause, resume, and rotate proxies across long jobs.
  • AI and agent builders who connect to the bundled MCP server, indicated by the project's ai-scraping, mcp, and mcp-server topics.
  • Scraping operations that pair the framework with residential or datacenter proxy providers, several of which sponsor the project.
  • A large community around the project, with 81,427 stars, 8,254 forks, and a Discord server for support and discussion.

Getting started

The library installs and imports as scrapling, as shown by from scrapling.fetchers import Fetcher, AsyncFetcher, StealthyFetcher, DynamicFetcher. Full installation and deployment instructions are published at https://scrapling.readthedocs.io/en/latest/.

How it compares

Within the facts, the nearest named reference points are Scrapy, whose spider API Scrapling echoes, and Playwright, which appears among the project's topics and which Scrapling's browser-based fetchers cover in spirit. Where Scrapy-style projects expect you to bring your own adaptive selection and anti-bot handling, Scrapling ships those behaviours as part of the same library.

When to use it — and when not to

A self-hoster still operates a Python runtime and headless browser sessions, and at crawl scale also supplies proxies, so the framework is not a zero-infrastructure option. Sites behind enterprise-grade protection such as Akamai, DataDome, Kasada, or Incapsula are outside what the framework handles by default, since the README points to third-party API endpoints that generate valid anti-bot tokens for those. Teams that only need static HTML parsing and no browser automation or anti-bot bypass will find a lighter library sufficient.

project readme (upstream, from github) — read inline

Scrapling Poster
</a>

Effortless Web Scraping for the Modern Web

D4Vinci%2FScrapling | Trendshift
README بالعربية README en Español README em Português (Brasil) README en Français README auf Deutsch 简体中文版自述文件 日本語のREADME Русская версия README 한국어 README
Tests PyPI version Docker Pulls PyPI package downloads Static Badge OpenClaw Skill
Discord X (formerly Twitter) Follow
Supported Python versions

Selection methods · Fetchers · Spiders · Proxy Rotation · CLI · MCP

Scrapling is an adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl.

Its parser learns from website changes and automatically relocates your elements when pages update. Its fetchers bypass anti-bot systems like Cloudflare Turnstile out of the box. And its spider framework lets you scale up to concurrent, multi-session crawls with pause/resume, automatic proxy rotation, and a crawl speed that adapts to how fast each website responds and backs off when it starts blocking you - all in a few lines of Python. One library, zero compromises.

Blazing fast crawls with real-time stats and streaming. Built by Web Scrapers for Web Scrapers and regular users, there's something for everyone.

from scrapling.fetchers import Fetcher, AsyncFetcher, StealthyFetcher, DynamicFetcher
StealthyFetcher.adaptive = True
p = StealthyFetcher.fetch('https://example.com', headless=True, network_idle=True)  # Fetch website under the radar!
products = p.css('.product', auto_save=True)                                        # Scrape data that survives website design changes!
products = p.css('.product', adaptive=True)                                         # Later, if the website structure changes, pass `adaptive=True` to find them!

Or scale up to full crawls

from scrapling.spiders import Spider, Response

class MySpider(Spider):
  name = "demo"
  start_urls = ["https://example.com/"]

  async def parse(self, response: Response):
      for item in response.css('.product'):
          yield {"title": item.css('h2::text').get()}

MySpider().start()

At DataImpulse, we specialize in developing custom proxy services for your business. Make requests from anywhere, collect data, and enjoy fast connections with our premium proxies.

Platinum Sponsors

ColdProxy provides residential and datacenter proxies for stable web scraping, public data collection, and geo-targeted testing across 195+ countries. Using this link gives you 5% off.
NodeMaven - The most efficient proxy provider for Web Scraping and Automation with the Highest Quality IP on the market. Use code SCRAPLING35 for 35% discount.
readme truncated — read the full docs on github

Frequently asked questions

Is Scrapling free to use?

Scrapling is open source under the BSD-3-Clause licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does Scrapling do?

🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDce

What is Scrapling written in?

Scrapling is primarily written in Python. Its source is publicly available at https://github.com/D4Vinci/Scrapling, and it has 81,798 GitHub stars.