Skip to main content

Smart web crawling toolbox — 6 adapters, auto-escalating router

Project description

OMK-Crawling — Cyberpunk anime girl at multi-monitor crawling workstation, neon teal and magenta Night City aesthetic

omk-crawling

Smart web crawling toolbox — 6 adapters, one router.
Fetch → Crawl → Browser → Extract → Convert → Mobile. Auto-escalates until it works.

License Python Adapters Tests

GitHub stars GitHub forks GitHub issues

omk-crawl https://example.com — one command. TLS detection → auto-escalation → unified result.


Demo

1. Auto-Escalation (verbose)

omk-crawl auto-escalation demo

2. Tool Discovery

omk-crawl tool discovery demo

3. Diagnose (dry-run)

omk-crawl diagnose demo

4. JSON Output

omk-crawl JSON output demo

5. Python API

omk-crawl Python API demo

6. Headless Browser Test (Playwright + Chrome)

omk-crawl headless browser test — Playwright Chrome renders HN, extracts 30 stories, screenshots, then cross-checks with SmartRouter


Why omk-crawling?

Web crawling never ends with one tool. A site might block your TLS fingerprint, require JS rendering, hide behind Cloudflare, or need a full LLM agent to navigate a login flow. omk-crawling routes across 6 adapters automatically (4 in the escalation chain), escalating from the lightest to the heaviest until the data is yours.

curl_cffi (0ms browser) → crawl4ai (render) → scrapling (stealth) → browser-use (LLM agent)

Architecture

                    ┌─────────────────────────────────────────┐
                    │            SmartRouter                   │
                    │  detect → route → escalate → result     │
                    └──────────┬──────────────────────────────┘
                               │
          ┌────────────────────┼────────────────────┐
          ▼                    ▼                    ▼
   ① curl_cffi          ② crawl4ai          ③ scrapling
   TLS/JA3 spoof        browser render      stealth browser
   0ms browser           + Markdown          + anti-bot bypass
          │                    │                    │
          └────────────────────┼────────────────────┘
                               ▼ (still blocked?)
                        ④ browser-use
                        LLM agent drives browser
                               │
                               ▼
                        CrawlResult (unified)
                        .markdown .html .extracted

Install

As OMK Skill (git clone + one-liner)

git clone https://github.com/dmae97/omk-crawling.git
cd omk-crawling
./install.sh              # symlink (dev mode, edits reflect instantly)
./install.sh --copy       # stable copy
./install.sh --uninstall  # remove

As Python Package

pip install git+https://github.com/dmae97/omk-crawling.git              # core (zero-dep router + CLI)
pip install "git+https://github.com/dmae97/omk-crawling.git#egg=omk-crawl[curl]"        # + curl_cffi (TLS fingerprint)
pip install "git+https://github.com/dmae97/omk-crawling.git#egg=omk-crawl[crawl4ai]"    # + crawl4ai (browser + markdown)
pip install "git+https://github.com/dmae97/omk-crawling.git#egg=omk-crawl[scrapling]"   # + scrapling (stealth)
pip install "git+https://github.com/dmae97/omk-crawling.git#egg=omk-crawl[browser]"     # + browser-use (LLM agent)
pip install "git+https://github.com/dmae97/omk-crawling.git#egg=omk-crawl[all]"         # everything

Quick Start

CLI

omk-crawl https://example.com                    # auto-escalate
omk-crawl https://example.com --tool curl_cffi   # force specific tool
omk-crawl https://example.com -o out.md          # save markdown to file
omk-crawl https://example.com --json             # JSON output
omk-crawl https://example.com -v                 # verbose escalation log
omk-crawl https://example.com --no-robots         # skip robots.txt check
omk-crawl https://example.com --min-delay 2.0     # 2s between same-domain requests
omk-crawl --diagnose https://example.com         # dry-run: what would we try?
omk-crawl --tools                                # list installed/missing tools
omk-crawl report.pdf                             # file → markdown (markitdown)

Python

from omk_crawl import crawl

# One-liner with auto-escalation
r = crawl("https://example.com")
print(r.markdown)       # LLM-ready markdown
print(r.summary())      # [ok] https://example.com | via curl_cffi | HTTP 200 | 42ms

# Verbose escalation
r = crawl("https://protected-site.com", verbose=True)
#   [omk-crawl] [1/4] Trying curl_cffi...
#   [omk-crawl]   ✗ curl_cffi: blocked — TLS fingerprint block
#   [omk-crawl] [2/4] Trying crawl4ai...
#   [omk-crawl]   ✓ crawl4ai succeeded (1204ms)

Pipeline

from omk_crawl.pipeline import Pipeline

result = (
    Pipeline()
    .fetch()
    .extract_css("div.product", {"title": "h2", "price": ".price"})
    .to_markdown()
    .run("https://shop.example.com")
)
print(result.extracted)  # [{"title": "...", "price": "..."}]

Async

import asyncio
from omk_crawl import crawl_async

async def main():
    r = await crawl_async("https://example.com")
    print(r.markdown)

asyncio.run(main())

Tool Router

6 adapters implemented, 4 in the auto-escalation chain. Additional tools (scrapy, crawlee, scrcpy, curl-impersonate, insane-search) are documented in references/ for manual use.

| Need | Tool | Layer | Status | |------|------|-------| | Single blocked URL (403/WAF) | insane-search | ① Fetch | documented | | TLS/JA3 fingerprint block | curl-impersonate / curl_cffi | ① Fetch | adapter | | Anti-bot stealth + Cloudflare | scrapling | ① Fetch | adapter | | Large-scale classic crawl | scrapy | ② Crawl | documented | | Queue · auto-scale · proxy | crawlee | ② Crawl | documented | | Web → LLM Markdown · deep crawl · MCP | crawl4ai | ② Crawl | adapter | | LLM agent drives browser | browser-use | ③ Browser | adapter | | Learn extraction from examples | autoscraper | ④ Extract | adapter | | PDF/Office/image/audio → Markdown | markitdown | ⑤ Convert | adapter | | Android-only data | scrcpy | ⑥ Mobile | documented |

Full decision tree: references/routing.md


Repo Structure

omk_crawl/              # Python package
  __init__.py           # Public API: crawl(), CrawlResult
  router.py             # SmartRouter — auto-detect + escalate
  detect.py             # Block detection (TLS, CF, JS, WAF)
  result.py             # Unified CrawlResult dataclass
  pipeline.py           # Composable fetch → extract → convert
  cli.py                # CLI entry point (omk-crawl)
  tools/                # Tool adapters (6 adapters)
tests/                  # pytest suite
references/             # Per-tool reference docs (14 files)
examples/               # Runnable examples (7 files)
scripts/                # check-versions.sh
assets/                 # Hero image
SKILL.md                # OMK skill definition
NOTICE.md               # Licenses + shoutouts to all 11 projects
install.sh              # One-liner skill installer

Development

pip install -e ".[all,dev]"
pytest tests/ -v                    # run tests
bash scripts/check-versions.sh      # upstream version drift
ruff check omk_crawl/               # lint

Shoutouts 🙏

Built on the shoulders of 11 amazing projects. See NOTICE.md for full attribution.

# Project License What it does
1 crawl4ai Apache-2.0 LLM-first web crawler
2 scrapy BSD-3-Clause Mature crawl framework
3 crawlee Apache-2.0 Production crawl infra
4 browser-use MIT LLM browser agent
5 curl-impersonate MIT TLS fingerprint bypass
6 curl_cffi MIT Python curl-impersonate
7 autoscraper MIT Example-based extraction
8 markitdown MIT File → Markdown
9 scrcpy Apache-2.0 Android mirror/control
10 scrapling BSD-3-Clause Stealth scraping
11 insane-search GPTaku Auto-bypass blocked sites (by fivetaku)

License

Apache-2.0. See LICENSE.txt and NOTICE.md.

Responsible Use

This toolbox includes TLS fingerprint impersonation and anti-bot bypass capabilities. Use responsibly:

  • Respect robots.txt and site Terms of Service before crawling.
  • Rate-limit your requests — don't overwhelm target servers.
  • Only crawl data you're authorized to access. Bypassing authentication or accessing protected data without permission may violate laws (CFAA, GDPR, etc.).
  • These tools are intended for legitimate research, development, and data extraction within legal boundaries.

This product includes software developed by UncleCode (https://x.com/unclecode) as part of the Crawl4AI project (https://github.com/unclecode/crawl4ai).


Star History

Star History Chart


Built with 💜 in the Night City · OMK//CONTROL · 2026

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

omk_crawl-2.0.1.tar.gz (834.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

omk_crawl-2.0.1-py3-none-any.whl (30.5 kB view details)

Uploaded Python 3

File details

Details for the file omk_crawl-2.0.1.tar.gz.

File metadata

  • Download URL: omk_crawl-2.0.1.tar.gz
  • Upload date:
  • Size: 834.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for omk_crawl-2.0.1.tar.gz
Algorithm Hash digest
SHA256 29e4c9eceb296437b89fe01ed0943151fcc5ebff9bda5020e1f64f114fceaba2
MD5 0a14f6b563be9fa4887ba93153a0bcda
BLAKE2b-256 a6524bd7069e2652d6e7c42827c054c7f6aaba46f7ab282de175f8b8a505a3a0

See more details on using hashes here.

File details

Details for the file omk_crawl-2.0.1-py3-none-any.whl.

File metadata

  • Download URL: omk_crawl-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 30.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for omk_crawl-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 494742c4e672a48c6621533547684b86ddef39a71173963a886d5848d449eda3
MD5 4b6864fe633c798bef8cd4865947c732
BLAKE2b-256 221176edb6955ce2abeba9232b164d228c85c29d9a8bba880c819605b5868c30

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page