BSpider
BSpider 是一个纯Python实现的高等级分布式全异步web抓取框架,框架采用多进程 + 协程的方式规避 GIL锁带来的不良影响,充分利用多核CPU性能,同时框架设计上尽可能的 减少框架自身对系统性能的影响,使尽可能多的计算资源用于抓取、解析操作。
- Demo
- 只读 用户名 reader 密码 reader
- 弹性,方便拓展。随时启停工作节点
- pipeline、middleware模块多任务可复用
- webUI, 轻松管理大量复杂抓取任务, 快速发现、解决、处理抓取问题。
- RBAC权限控制。RESTful 风格API, 方便二次开发
- 敏捷开发、调试方便、快速上线
- Python 3.7+
- 框架服务只能部署在 Linux, Mac OSX 系统
- 可以在 Linux, Windows, Mac OSX 系统进行开发
- rabbitmq
>3.7.x
并启用rabbitmq management plugins
提供有访问UI权限的账号 - MySQL
>5.x
####### 后端部分
- 定时任务和抓取任务绑定时,绑定失败
- 查询数据源接口返回异常
- 调整了有问题的目录层级、类名
- 更新了核心包 aiohttp、aiomysql、aiormq、APScheduler等 的版本 ####### 前端部分
- 增加对后端 read 角色用户的支持
- 增加对data_source模块的前端支持
- 微调了登录页面的文案
快速安装:
pip install bspider
或从此git仓库自行安装
=============
启动master
bspider mkplatform ${platform_name} # 初始化工作台
vim ${platform_name}/config/frame_settings.py # 填入配置
bspider master start # 启动master节点第一次启动节点会初始化MySQL表
notice:
- bspider-studio默认账号:admin 密码:admin
- 登录地址 http://${frame_settings.MASTER.ip}:{frame_settings.MASTER.port}
此处建议使用默认配置并配置nginx进行端口转发
启动agent
bspider startplatform ${platform_name} # 初始化工作台
vim ${platform_name}/config/frame_settings.py # 填入配置
bspider agent start # 、初次启动agent需要使用命令行进行启动,后续可在bspider-studio进行管理
notice:
- agent frame_settings 除agent 配置以外其他配置应和master 保持一致
AGENT.ip需 和 MASTER.ip 互访
bspider startplatform ${platform_name} # 初始化工作台
vim ${platform_name}/config/frame_settings.py # 填入配置
bspider master start # 启动master节点第一次启动节点会初始化MySQL表
bspider agent start # 初次启动agent需要使用命令行进行启动,后续可在bspider-studio进行管理
notice:
- bspider-studio默认账号:admin 密码:admin
- 登录地址 http://${frame_settings.MASTER.ip}:{frame_settings.MASTER.port}
此处建议使用默认配置并配置nginx进行端口转发
- 单节点下推荐AGENT.ip、MASTER.ip 都使用127.0.0.1
初始化项目
# 在要进行开发的电脑上
bspider mkplatform ${platform_name} # 初始化工作台
vim ${platform_name}/config/frame_settings.py # 填入配置 AGENT配置可不填,其他配置和线上配置保持一致
bspider mkspider ${spider_name} # 自动生成模板代码
cd ${platform_name}/projects/${spider_name}
# 开始开发
各文件说明
- pipeline.*_pipeline.py 类似于Scrapy 的pipeline
一个py文件只能包含一个pipeline class 且类名必须为 *Pipeline
- project.${project_name}.*_extractor.py 抽取逻辑。目前
只支持xpath 通常一个抓取任务只需编写此组件
- middleware.*_middleware.py 下载器中间件。
一个py文件只能包含一个middleware class 且类名必须为 *Middleware
- project.${project_name}.settings.yml 当前下载任务的配置
只需编写 extractor 和 yml 配置文件即可完成爬虫开发
notice: 每个项目只可配置一个extractor, 但可配置多个pipeline 或 middleware
发布到服务
*** 发布前先确认有 一个或以上的 parser、downloader 进程
运行
进入ui提交任务
TODO
- 前端权限校验 worker 只能修改自己的 job
- code 增加 doc 使用文档
- project页面直达 extractor编辑页面