特色栏目

ASP源码

PHP源码

.NET源码

JSP源码

游戏频道
专题合集
关闭菜单
首页> 数据采集> Scrapy 重构新选择:scrapy_cffi 快速上手教程

Scrapy 重构新选择:scrapy_cffi 快速上手教程

时间:2026-02-11 14:22:01 作者:互联网

随着爬虫场景的不断升级,Scrapy 虽然成熟稳定,但在异步支持、WebSocket 和现代请求库等方面有一些局限。

scrapy_cffi 是在 Scrapy 风格基础上重构的异步爬虫框架,支持更现代的请求库、扩展机制和异步 DB/MQ 管理。

通过这篇教程,你可以快速创建自己的异步爬虫项目,并体验框架的核心特性。


1.为什么要重构 Scrapy

Scrapy 本身虽然功能强大,但存在一些痛点:

重构目标


2.快速构建

2.1 安装框架

pip install scrapy_cffi

2.1 创建项目

# 新建项目
scrapy-cffi startproject 
 
cd 
 
# 生成爬虫
scrapy-cffi genspider  
"""
genspider 后可选参数:
    -r    创建 redis 爬虫
    -m    创建 rabbitmq 爬虫
    -k    启用 kafka 日志队列
"""
 
# 运行爬虫
python runner.py

3.配置

框架的配置基于 pydantic,支持类型校验和 IDE 自动补全。大部分简单请求参数(如并发数、延迟、重试、UA 等)开箱即用,下面是一些配置注意事项:

更多配置见 docs


4.爬虫

框架完全异步,但爬虫层可以灵活编写:

async def parse(self, response):
    # 异步请求示例
    yield HttpRequest(url="https://example.com")
    yield Item(name="demo")

5.拦截器与管道


6.其他扩展

6.1 json 提取

6.2 protobuf 编码解码

6.3 支持 C 扩展注入

推荐项目结构:

/project
|
|- cpy_resources
|    |- module1_dir
|    |     |- build_dir
|    |     |     |- libmodule1.dll      # Windows 编译的C扩展二进制文件
|    |     |     |- libmodule1.so       # Linux 编译的 C 扩展二进制文件
|    |     |     |- libmodule1.dylib    # macOS 编译的 C 扩展二进制文件
|    |     |
|    |     |- module1.pyi               # 可选,用于 ide 代码提示
|    |     |- fallback.py               # C 扩展加载失败后可以尝试加载的纯 python 实现
|    |     |- wrapper.py                # 通过 ctypes 加载 C 扩展的核心实现
|    |
|    |- module2_dir
|    |- ...
|
|- extensions
|- interceptors
|- items
|- pipelines
|- spiders
|- settings.py
|- runner.py

然后在配置 settings.py 中定义:

settings.CPY_EXTENSIONS.DIR = "cpy_extensions"

from scrapy_cffi.models import CPYExtension
settings.CPY_EXTENSIONS.RESOURCES = [
    CPYExtension(module_name="module1_dir")
]

框架会将扩展程序注入全局(应当避免和某些模块重名),在任意代码中直接使用

import module1_dir

6.4 hook 插件

6.5 模块化设计


7.快速 demo

通过 CLI 可以直接生成可运行 demo 项目:

scrapy-cffi demo
"""
可选参数:
    -r    创建 redis demo
    -m    创建 rabbitmq demo
    -k    启用 kafka 日志队列
相关文章

热门文章

猜你喜欢

返回顶部