Crawlo: A high-performance asynchronous Python web crawling framework with distributed support.。
Project description
Crawlo
A Modern High-Performance Python Async Web Scraping Framework
Python 3.8+ · Python 3.14 Compatible
Quick Start · Key Features · Docs · Examples
✨ Quick Start (3 Steps)
1. Install
pip install crawlo
2. Create a Spider
crawlo startproject myproject
cd myproject
crawlo genspider example example.com
3. Run
crawlo run example
👉 5-Minute Quickstart Tutorial →
🚀 Key Features
⚡ High-Performance Async Architecture
- Built on asyncio + aiohttp/httpx/curl-cffi multi-protocol downloaders
- Smart concurrency control, connection pool reuse, auto throughput optimization
- HTTP/2 support, TLS fingerprint emulation (bypass JA3 detection)
🛡️ Robust Anti-Bot Capabilities
- HybridDownloader: 6-level detection priority, auto-switch protocol/browser engine
- Cloudflare Auto-Bypass: Detects challenge pages and auto-switches to stealth browser
- 5 Browser Downloaders: Playwright / Camoufox / CloakBrowser / DrissionPage / Chrome
- BROWSER_ Unified Config Layer*: One set of params for all browser downloaders
- Adaptive Selectors: Auto-relocate elements when site structure changes (selector self-healing) — Guide →
🤖 AI Integration (MCP Server)
- Claude / Cursor directly invoke Crawlo scraping capabilities
- Three scraping modes:
basic(1-3s) →stealth(3-10s) →max-stealth(10s+) - Browser singleton pool: stealth/max-stealth modes reuse instances
- Structured error responses: distinguish
TIMEOUT/CONNECTION_ERROR/STEALTH_UNAVAILABLE, with suggestions
📊 Four-Level Backpressure Defense
- Engine layer: request generation control (enqueue + TaskManager dual checks)
- QueueManager layer: strategy-driven (
QueueSizeStrategy/AdaptiveStrategy/CompositeStrategy) - MemoryQueue layer: Mixin delegation + fallback logic
- Hard limit: direct rejection when queue is full
- Smart enhancement:
IntelligentBackpressureCalculator+BackpressureMonitoroptional integration
📬 Multi-Channel Notification
- 5 Channels: DingTalk / Feishu / WeCom / Email / SMS
- 30+ Preset Templates: task start/stop, anomaly alerts, progress updates, DB monitoring
- Async Delivery:
async_send_*functions,run_in_executorwrapper to avoid blocking event loop - Message dedup + rate limiting to prevent notification storms
🔄 Three Deployment Modes
| Mode | Config | Coordination | Use Case |
|---|---|---|---|
| Memory Mode | RUN_MODE='standalone' QUEUE_TYPE='memory' |
None (auto exit) | Dev/debug, quick validation |
| Multi-Node ⭐ | RUN_MODE='auto' QUEUE_TYPE='redis' |
Competing consumption (BZPOPMIN) | Multi-machine, task loss acceptable |
| Distributed | RUN_MODE='distributed' QUEUE_TYPE='redis_stream' |
ACK + heartbeat + failover | Production, high reliability |
All three modes share the same priority model — switch without modifying spider code. Learn More → · Production Deployment →
📚 Documentation
🎯 By Role
| You are? | Recommended Reading |
|---|---|
| Beginner | 5-Min Quickstart → Installation |
| Developer | Configuration Guide → Scheduling Guide |
| Ops | Run Mode Deep Dive → Checkpoint System → Production Deployment |
📖 Full Docs Navigation
- 🚀 Getting Started - Install, create your first spider
- 📚 Tutorials - Complete guides from basics to production
- 🎯 Guides - Scenario-based deep dives
- Configuration, Scheduling
- Backpressure, Run Modes
- Adaptive Selector — selector self-healing after site redesign
- 📖 Concepts - Architecture, lifecycle, error handling
- Distributed Architecture — Redis Streams, failover, coordinated shutdown
- 🖥 Production Deployment - Linux server setup, systemd, monitoring
- 🔧 API Reference - Complete API docs
- 💡 Examples - Real-world examples and best practices
- ❓ FAQ - FAQ and troubleshooting
💡 Examples
Check out the examples/ directory:
- Basic - Quick start
- Advanced - Complex scenarios
- Production - Ready for production
🤝 Contributing
Issues and Pull Requests are welcome!
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
📄 License
Licensed under BSD 3-Clause - see the LICENSE file for details.
⭐ If this project helps you, please give us a Star!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file crawlo-1.7.0.tar.gz.
File metadata
- Download URL: crawlo-1.7.0.tar.gz
- Upload date:
- Size: 72.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
438640722ca99e94c3843a4cc276347ebb36ed09cc150822c48e9ce86a905b89
|
|
| MD5 |
1cec4885a99c6d579551c72eca241a68
|
|
| BLAKE2b-256 |
c257966fca39150a7ac99a11ea261d347ac2fc31b5856c5e8d9790b4edf083f3
|
File details
Details for the file crawlo-1.7.0-py3-none-any.whl.
File metadata
- Download URL: crawlo-1.7.0-py3-none-any.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f17d97338cf31e6a6d20e6cf69e93ad424fe8396221a71662c4b71ae7de01bb
|
|
| MD5 |
357f3cc37af36402e7c1828b389c789d
|
|
| BLAKE2b-256 |
8ec6b072f9b401b3fc94cae6ae298c71098fc4e7f5c2397874da68b24d11c7d2
|