news 2026/5/26 8:54:26

【爬虫框架-8】其他

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【爬虫框架-8】其他

Funspider 分布式爬虫框架概览

一、核心特性

1.1 数据入库机制

ItemBuffer 批量入库设计

借鉴 Feapder 的 ItemBuffer 机制,实现高效的批量数据入库:

classItemBuffer:""" 数据缓冲管理器 功能: - 批量缓冲:数据达到阈值后批量写入,减少数据库IO - 多 Pipeline 支持:同时支持 MySQL、MongoDB、Elasticsearch 等 - 失败重试:入库失败自动重试,超过次数存入 Redis - 去重处理:支持内存去重和 Redis 去重 """def__init__(self,spider_name:str,batch_size:int=100,max_retry_times:int=3):self._items_queue=Queue(maxsize=10000)self._pipelines=[]self._dedup_cache=set()# 内存去重self.batch_size=batch_size self.max_retry_times=max_retry_times

核心流程

  1. 数据收集:解析方法yield Item()后,Item 进入队列
  2. 批量缓冲:队列达到batch_size或超时触发刷新
  3. 去重过滤:基于fingerprint进行去重
  4. Pipeline 链式处理:按优先级依次调用 Pipeline
  5. 失败重试:失败后重试,超过次数存入 Redis

代码示例

# 在爬虫中使用defparse_detail(self,request,response):item=Item()item.table_name='products'item.title=response.xpath('//h1/text()').get()item.price=response.xpath('//span[@class="price"]/text()').get()yielditem# 自动进入 ItemBuffer

1.2 去重机制

继承 Feapder 的去重方案

支持多种去重策略,兼容 Feapder 的去重过滤器:

fromfunspider.dedupimportBloomFilter,ExpireFilter# 1. 布隆过滤器(内存高效)dedup=BloomFilter(redis_url='redis://localhost:6379/0',key='spider:dedup:products',bit_size=10000000# 1000万位)# 2. 带过期时间的去重(适合增量爬取)dedup=ExpireFilter(redis_url='redis://localhost:6379/0',key='spider:dedup:products',expire_time=86400# 24小时过期)

去重指纹生成

classItem:@propertydeffingerprint(self)->str:"""生成数据指纹用于去重"""data={}forkey,valueinself.__dict__.items():ifnotkey.startswith('_'):data[key]=value fingerprint_str=json.dumps(data,sort_keys=True,ensure_ascii=False)returnhashlib.md5(fingerprint_str.encode()).hexdigest()

Request 去重

# Funboost 自带的消息去重机制booster.publish(request.to_dict(),task_id=task_id,# Funboost 会根据 task_id 自动去重)

二、框架定位与局限性

2.1 与 其他爬虫框架相比 对比

缺少的功能

  1. AirSpider(轻量级爬虫)
    • Feapder 的 AirSpider 支持单脚本运行,无需 Redis/MySQL
    • Funspider 必须依赖 Redis 作为消息队列,不适合简单任务
  2. Spider(单机爬虫)
    • Feapder 的 Spider 类似 Scrapy,适合中小型项目
    • Funspider 强依赖分布式架构,小项目过于复杂
  3. 内置下载器
    • Feapder 内置多种下载器(requests、selenium、playwright)
    • Funspider 需要用户自行实现下载逻辑
    • 可以尝试将浏览器单独封装api ,每个tab 一个任务,节省资源。爬虫使用api 下载。

2.2 适用场景

Funspider 适合的场景

  • 长周期任务:持续运行数月甚至数年的数据采集
  • 大规模爬取:数千万甚至数亿级别的数据量
  • 分布式部署:需要多台机器协同工作
  • 复杂调度:多层级的请求依赖关系(列表页→详情页→评论页)

不适合的场景

  • 一次性数据采集(推荐使用 Scrapy /feapder)
  • 小规模项目(< 10万数据,推荐 Feapder AirSpider)
  • 快速原型开发(推荐 Funboost 自带的 boost_spider)

boost_spider 示例(更简单):


三、框架现状与未来规划

3.1 当前状态

已实现的核心功能

  • 分布式请求调度(基于 Funboost)
  • ItemBuffer 批量入库
  • 多 Pipeline 支持(MySQL、MongoDB、Elasticsearch)
  • 去重机制(内存 + Redis)
  • 全链路追踪(Trace/Span)
  • 失败数据恢复
  • Web 管理界面(funboost自带了一个队列管理可以使用)
  • 存在的问题
  1. 代码质量
    • 部分代码耦合度高,需要重构
    • 注释和文档不够完善

3.2 TODO 清单

优先级 1:运维工具

1. Web 管理后台

2. 任务发布系统

3. 链路追踪可视化

优先级 2:代码重构
  1. 解耦核心模块
    • 将 Worker、Engine、ItemBuffer 完全分离
    • 统一接口规范,便于扩展

3.3 开源计划

开源时机

完成以下条件后考虑开源:

  1. 代码质量达标
    • 重构完成,模块清晰
    • 文档完善

项目将在代码质量达标后开源,敬请期待!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 8:21:49

Linux 内核设计中的核心思想与架构原则

&#x1f525;作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生&#xff0c;研究方向无线联邦学习 &#x1f3ac;擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 ❄️作者主页&#xff1a;一个平凡而…

作者头像 李华
网站建设 2026/5/26 5:41:56

如何用Formily可视化设计器在5分钟内构建企业级表单

如何用Formily可视化设计器在5分钟内构建企业级表单 【免费下载链接】formily &#x1f4f1;&#x1f680; &#x1f9e9; Cross Device & High Performance Normal Form/Dynamic(JSON Schema) Form/Form Builder -- Support React/React Native/Vue 2/Vue 3 项目地址: h…

作者头像 李华
网站建设 2026/5/26 5:25:08

ARP扫描工具arp-scan:局域网设备发现完全指南

ARP扫描工具arp-scan&#xff1a;局域网设备发现完全指南 【免费下载链接】arp-scan The ARP Scanner 项目地址: https://gitcode.com/gh_mirrors/ar/arp-scan 想要快速发现局域网中所有设备&#xff1f;ARP扫描工具arp-scan就是你的最佳选择。这款专为网络设备发现设计…

作者头像 李华
网站建设 2026/5/24 19:19:21

蓝奏云直链解析:3步搞定文件高速下载的完整攻略

蓝奏云直链解析&#xff1a;3步搞定文件高速下载的完整攻略 【免费下载链接】LanzouAPI 蓝奏云直链&#xff0c;蓝奏api&#xff0c;蓝奏解析&#xff0c;蓝奏云解析API&#xff0c;蓝奏云带密码解析 项目地址: https://gitcode.com/gh_mirrors/la/LanzouAPI 还在为繁琐…

作者头像 李华
网站建设 2026/5/25 4:42:52

dnSpy调试黑科技:从异常追踪到性能优化的高级实战指南

dnSpy调试黑科技&#xff1a;从异常追踪到性能优化的高级实战指南 【免费下载链接】dnSpy 项目地址: https://gitcode.com/gh_mirrors/dns/dnSpy 在.NET开发的复杂场景中&#xff0c;你是否曾因一个隐蔽的NullReferenceException而耗费数小时&#xff1f;是否在调试多线…

作者头像 李华
网站建设 2026/5/26 8:01:23

Rocky Linux V8.10安装向日葵,亲测有效

向日葵的rpm包对V8.10的Rocky兼容性太差了,直接dnf install是装不上的,以下总结了下载最新rpm后该做的步骤。 1. 切换到root 2. 完全卸载向日葵(如果之前尝试安装过) dnf remove sunloginclient -y rm -rf /usr/local/sunlogin rm -rf /var/log/sunlogin3. 安装所有必要…

作者头像 李华