An asyncio-style web scraping framework inspired by Scrapy, powered by curl_cffi.
Project description
scrapy_cffi
An asyncio-style web scraping framework inspired by Scrapy, powered by
curl_cffi.
scrapy_cffi is a lightweight Python crawler framework that mimics the Scrapy architecture while replacing Twisted with curl_cffi as the underlying HTTP/WebSocket client.
It is designed to be efficient, modular, and suitable for both simple tasks and large-scale distributed crawlers.
✨ Features
-
Scrapy-style architecture: spiders, items, interceptors, pipelines, signals
-
Fully asyncio-based engine for maximum concurrency
-
HTTP & WebSocket support: built-in asynchronous clients
-
Flexible DB integration: Redis, MySQL, MongoDB with async retry & reconnect
-
Message queue support: RabbitMQ & Kafka
-
Configurable deployment: settings system supporting .env files, single-instance, cluster mode, and sentinel mode
-
Lightweight middleware & interceptor system for easy extensions
-
High-performance C-extension hooks for CPU-intensive tasks
-
Redis-compatible scheduler (optional) for distributed crawling
-
Designed for high-concurrency, high-availability crawling
📦 Installation
From PyPI
pip install scrapy_cffi
From source (unstable)
git clone https://github.com/aFunnyStrange/scrapy_cffi.git
cd scrapy_cffi
pip install -e .
🚀 Quick Start
scrapy-cffi startproject <project_name>
cd <project_name>
scrapy-cffi genspider <spider_name> <domain>
python runner.py
Notes:
The CLI command is
scrapy_cffiin versions ≤0.1.4 andscrapy-cffiin versions >0.1.4 for improved usability.
⚙️ Settings & Deployment
scrapy_cffi now fully supports a flexible settings system:
-
Load configuration from Python files or
.envfiles -
Choose between single-instance, cluster, or sentinel mode
-
Configure databases, message queues, and concurrency limits in one place
-
Seamless integration with async Redis/MySQL/MongoDB managers
Example settings.py snippet:
settings.REDIS_INFO.MODE = "sentinel"
settings.REDIS_INFO.SENTINELS = [("<sentinel_host1>", "int(sentinel_port1)"), ("<sentinel_host2>", "int(sentinel_port2)"), ("<sentinel_host3>", "int(sentinel_port3)")]
settings.REDIS_INFO.MASTER_NAME = "<master_name>"
settings.REDIS_INFO.SENTINEL_OVERRIDE_MASTER = ("master_host", "int(master_port)")
📖 Documentation
Full technical documentation and module-level guides are available in the docs/ directory.
📄 License
BSD 3-Clause License. See LICENSE for details.
🛠 Community Highlights
Inspired by the challenges of async Python crawling:
-
Blocking requests and slow DB integration
-
Complex deployment for distributed crawlers
-
Need for fully concurrent HTTP & WebSocket requests
scrapy_cffi addresses these with a modular, high-performance framework that is async-first, extensible, and deployment-ready.
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 scrapy_cffi-0.2.5.tar.gz.
File metadata
- Download URL: scrapy_cffi-0.2.5.tar.gz
- Upload date:
- Size: 104.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4bd81fb365f7d8ee99ce2b38935e8afb2a210b4cd89f8008fc53057af16d85a1
|
|
| MD5 |
6de045e6f9a2f6c7a1165ba75c935c1a
|
|
| BLAKE2b-256 |
0b9b615f3f64f58bc4ee848f7e7e2099cfbb0655b8eb70690f1581637b539964
|
File details
Details for the file scrapy_cffi-0.2.5-py3-none-any.whl.
File metadata
- Download URL: scrapy_cffi-0.2.5-py3-none-any.whl
- Upload date:
- Size: 143.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b668749042cf044ada93cd3d1777bf590d0ec8dcfa39997b77c88375597f03e9
|
|
| MD5 |
80d2904d5dae427be32baa3b9212940e
|
|
| BLAKE2b-256 |
2e38333bb027fddfd711755d4eac103182db96ce8a1283e4437c4c3e4b17944c
|