Skip to content

Latest commit

 

History

History
62 lines (45 loc) · 4.81 KB

README.md

File metadata and controls

62 lines (45 loc) · 4.81 KB

用go简单实现了一版playwright爬虫器,发现性能不是python版能比的,后面又用go实现了网站目录文件爆破简单版本,跑起来速度简直太爽了。后面有时间会用继续用go重构此项目,python版的不再维护。


crawloop

基于PlayWright实现对js渲染的动态网页进行抓取,包含网页源码、截图、网站入口、网页交互过程等,支持优先级任务调度。

crawloop 目前支持以下特性:

  • 原生浏览器环境,支持chrome、firefox,并支持开启容器内虚拟显示器;
  • 完整DOM事件收集,自动化触发;
  • 全面分析收集,包括js文件,页面源码、网站截图、网站图标、标题、编码、cookies、重定向链等等;
  • 基于Wappalyzer实现python版网站指纹识别,主要包含网站使用技术、技术版本号、置信度等;
  • 支持Host绑定,可自定义添加Referer;
  • 支持请求代理,支持爬虫结果通过http或gRPC主动回调;
  • 任务进度监控:支持实时监控任务进度;
  • 自定义任务参数:支持在线配置调度任务入参,即时生效;
  • 调度中心HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心HA;
  • 爬虫执行器HA(分布式):任务分布式执行,任务"爬虫执行器"支持集群部署,可保证爬虫任务执行HA;
  • 弹性扩容缩容:一旦有新的爬虫执行器机器上线或者下线,下次调度时将会重新分配任务;
  • 触发策略:提供丰富的任务触发策略,包括:Cron触发、固定间隔触发、固定延时触发、API(事件)触发、人工触发、父子任务触发;
  • 阻塞处理策略:调度过于密集爬虫执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度;
  • 任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务;
  • 任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;其中分片任务支持分片粒度的失败重试;并支持断点续爬;
  • 路由策略:爬虫执行器集群部署时提供丰富的路由策略,包括:第一个(已实现)、最后一个(已实现)、轮询(已实现)、加权轮询(已实现)、一致性HASH(待实现)等;
  • 动态分片:分片广播任务以任务数量为维度进行分片(默认为100条url为一个分片),以分片为单位下发不同爬虫执行器,协同进行业务处理;在进行大数据量爬虫任务操作时可显著提升任务处理能力和速度;
  • 调度线程池:调度系统多线程触发调度运行,确保调度精确执行,不被堵塞;
  • 全异步:任务调度流程全异步化设计实现,如异步调度、异步运行、异步回调等,有效对密集调度进行流量削峰,理论上支持任意时长任务的运行;
  • 跨语言:调度中心与爬虫执行器提供语言无关的 RESTful API 服务,第三方任意语言可据此对接调度中心或者实现自定义爬虫执行器;
  • 任务优先级控制:爬虫执行器实现优先级队列,可对不同优先级任务进行隔离拆分,慢任务或权重较低任务自动降级进入"Slow"队列,避免耗尽爬虫执行器,提高系统灵活性;
  • 容器化:项目编译在容器内进行,进一步实现功能开箱即用;

环境(Docker)

  • Docker 18.03+
  • Postgresl 9.x+
  • Rabbitmq 3.8.x+
  • Docker Compose 1.24+

架构

Crawloop的架构包括了一个主节点(Master Node)和多个工作节点(Worker Node),以及负责通信和数据储存的gRPC和Postgresql数据库。

客户端应用向主节点请求数据,主节点通过Celery和Rabbitmq来执行任务派发调度以及负载均衡,工作节点收到任务之后,开始执行爬虫任务,并将任务结果通过gRPC回调给主节点,之后落库存储。

主节点是整个Crawloop架构的核心,属于Crawloop的中控系统。

主节点主要负责以下功能:

  1. 周期性任务调度
  2. 工作节点管理和通信
  3. 对外API服务

主节点负责与客户端进行通信,并通过Celery将爬虫任务基于负载均衡算法异步派发给工作节点。

工作节点

工作节点的主要功能是执行爬虫任务和回调抓取数据与日志,并且通过gRPC跟主节点通信。通过增加工作节点数量,Crawloop可以做到横向扩展,不同的爬虫任务可以分配到不同的节点上执行。