Install
openclaw skills install scrapling-extractWeb scraping and data extraction using the Python Scrapling library. Use to scrape static HTML pages, JavaScript-rendered pages (Playwright), and anti-bot or...
openclaw skills install scrapling-extractExtract structured website data with resilient selection patterns, adaptive relocation, and the right Scrapling fetcher mode for each target.
Fetcher for static pages and API-like HTML responses.DynamicFetcher when JavaScript rendering is required.StealthyFetcher when anti-bot protection or browser fingerprinting issues are likely.::text, ::attr(href)).pip install scraplingpip install "scrapling[fetchers]"scrapling installpython3 -m playwright install (required for DynamicFetcher and StealthyFetcher)pip install "scrapling[shell]" for shell + extract commandspip install "scrapling[ai]" for MCP capabilitiesUse Scrapling CLI for fastest no-code extraction:
scrapling extract get "https://example.com" content.md --css-selector "main"
Use the bundled helper:
# Static page (default)
python scripts/extract_with_scrapling.py --url "https://example.com" --css "h1::text"
# JavaScript-rendered page
python scripts/extract_with_scrapling.py --url "https://example.com" --fetcher dynamic --css "h1::text"
# Anti-bot protected page
python scripts/extract_with_scrapling.py --url "https://example.com" --fetcher stealthy --css "h1::text"
Use session classes when cookies/state must persist across requests.
from scrapling.fetchers import FetcherSession
session = FetcherSession()
login_page = session.post("https://example.com/login", data={"user": "...", "pass": "..."})
protected_page = session.get("https://example.com/dashboard")
headline = protected_page.css_first("h1::text")
Use StealthySession or DynamicSession as drop-in replacements for anti-bot or JS-rendered targets.
Use auto_save=True on initial capture and retry with adaptive selection on later runs when selectors break.
from scrapling.fetchers import Fetcher
# First run: saves DOM snapshot so adaptive relocation can work later
page = Fetcher.auto_match("https://example.com", auto_save=True, disable_adaptive=False)
price = page.css_first(".price::text")
# Later runs: automatically relocates the selector even if the DOM changed
page = Fetcher.auto_match("https://example.com", auto_save=False, disable_adaptive=False)
price = page.css_first(".price::text")