同步操作将从 tikazyq/crawlab 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
中文 | English
安装 | 运行 | 截图 | 架构 | 集成 | 比较 | 相关文章 | 社区&赞助 | 更新日志 | 免责声明
基于Golang的分布式爬虫管理平台,支持Python、NodeJS、Go、Java、PHP等多种编程语言以及多种爬虫框架。
三种方式:
请打开命令行并执行下列命令。请保证您已经提前安装了 docker-compose
。
git clone https://github.com/crawlab-team/crawlab
cd crawlab
docker-compose up -d
接下来,您可以看看 docker-compose.yml
(包含详细配置参数),以及参考 文档 来查看更多信息。
请用docker-compose
来一键启动,甚至不用配置MongoDB和Redis数据库,当然我们推荐这样做。在当前目录中创建docker-compose.yml
文件,输入以下内容。
version: '3.3'
services:
master:
image: tikazyq/crawlab:latest
container_name: master
environment:
CRAWLAB_SERVER_MASTER: "Y"
CRAWLAB_MONGO_HOST: "mongo"
CRAWLAB_REDIS_ADDRESS: "redis"
ports:
- "8080:8080"
depends_on:
- mongo
- redis
mongo:
image: mongo:latest
restart: always
ports:
- "27017:27017"
redis:
image: redis:latest
restart: always
ports:
- "6379:6379"
然后执行以下命令,Crawlab主节点+MongoDB+Redis就启动了。打开http://localhost:8080
就能看到界面。
docker-compose up
Docker部署的详情,请见相关文档。
请参考相关文档。
Crawlab的架构包括了一个主节点(Master Node)和多个工作节点(Worker Node),以及负责通信和数据储存的Redis和MongoDB数据库。
前端应用向主节点请求数据,主节点通过MongoDB和Redis来执行任务派发调度以及部署,工作节点收到任务之后,开始执行爬虫任务,并将任务结果储存到MongoDB。架构相对于v0.3.0
之前的Celery版本有所精简,去除了不必要的节点监控模块Flower,节点监控主要由Redis完成。
主节点是整个Crawlab架构的核心,属于Crawlab的中控系统。
主节点主要负责以下功能:
主节点负责与前端应用进行通信,并通过Redis将爬虫任务派发给工作节点。同时,主节点会同步(部署)爬虫给工作节点,通过Redis和MongoDB的GridFS。
工作节点的主要功能是执行爬虫任务和储存抓取数据与日志,并且通过Redis的PubSub
跟主节点通信。通过增加工作节点数量,Crawlab可以做到横向扩展,不同的爬虫任务可以分配到不同的节点上执行。
MongoDB是Crawlab的运行数据库,储存有节点、爬虫、任务、定时任务等数据,另外GridFS文件储存方式是主节点储存爬虫文件并同步到工作节点的中间媒介。
Redis是非常受欢迎的Key-Value数据库,在Crawlab中主要实现节点间数据通信的功能。例如,节点会将自己信息通过HSET
储存在Redis的nodes
哈希列表中,主节点根据哈希列表来判断在线节点。
前端是一个基于Vue-Element-Admin的单页应用。其中重用了很多Element-UI的控件来支持相应的展示。
Crawlab SDK 提供了一些 helper
方法来让您的爬虫更好的集成到 Crawlab 中,例如保存结果数据到 Crawlab 中等等。
在 settings.py
中找到 ITEM_PIPELINES
(dict
类型的变量),在其中添加如下内容。
ITEM_PIPELINES = {
'crawlab.pipelines.CrawlabMongoPipeline': 888,
}
然后,启动 Scrapy 爬虫,运行完成之后,您就应该能看到抓取结果出现在 任务详情-结果 里。
将下列代码加入到您爬虫中的结果保存部分。
# 引入保存结果方法
from crawlab import save_item
# 这是一个结果,需要为 dict 类型
result = {'name': 'crawlab'}
# 调用保存结果方法
save_item(result)
然后,启动爬虫,运行完成之后,您就应该能看到抓取结果出现在 任务详情-结果 里。
爬虫任务本质上是由一个shell命令来实现的。任务ID将以环境变量CRAWLAB_TASK_ID
的形式存在于爬虫任务运行的进程中,并以此来关联抓取数据。另外,CRAWLAB_COLLECTION
是Crawlab传过来的所存放collection的名称。
在爬虫程序中,需要将CRAWLAB_TASK_ID
的值以task_id
作为可以存入数据库中CRAWLAB_COLLECTION
的collection中。这样Crawlab就知道如何将爬虫任务与抓取数据关联起来了。当前,Crawlab只支持MongoDB。
现在已经有一些爬虫管理框架了,因此为啥还要用Crawlab?
因为很多现有当平台都依赖于Scrapyd,限制了爬虫的编程语言以及框架,爬虫工程师只能用scrapy和python。当然,scrapy是非常优秀的爬虫框架,但是它不能做一切事情。
Crawlab使用起来很方便,也很通用,可以适用于几乎任何主流语言和框架。它还有一个精美的前端界面,让用户可以方便的管理和运行爬虫。
框架 | 技术 | 优点 | 缺点 | Github 统计数据 |
---|---|---|---|---|
Crawlab | Golang + Vue | 不局限于 scrapy,可以运行任何语言和框架的爬虫,精美的 UI 界面,天然支持分布式爬虫,支持节点管理、爬虫管理、任务管理、定时任务、结果导出、数据统计、消息通知、可配置爬虫、在线编辑代码等功能 | 暂时不支持爬虫版本管理 | |
ScrapydWeb | Python Flask + Vue | 精美的 UI 界面,内置了 scrapy 日志解析器,有较多任务运行统计图表,支持节点管理、定时任务、邮件提醒、移动界面,算是 scrapy-based 中功能完善的爬虫管理平台 | 不支持 scrapy 以外的爬虫,Python Flask 为后端,性能上有一定局限性 | |
Gerapy | Python Django + Vue | Gerapy 是崔庆才大神开发的爬虫管理平台,安装部署非常简单,同样基于 scrapyd,有精美的 UI 界面,支持节点管理、代码编辑、可配置规则等功能 | 同样不支持 scrapy 以外的爬虫,而且据使用者反馈,1.0 版本有很多 bug,期待 2.0 版本会有一定程度的改进 | |
SpiderKeeper | Python Flask | 基于 scrapyd,开源版 Scrapyhub,非常简洁的 UI 界面,支持定时任务 | 可能有些过于简洁了,不支持分页,不支持节点管理,不支持 scrapy 以外的爬虫 |
假如您是Docker部署的,请检查一下您是否用了Docker Machine,这样的话您需要输入地址 http://192.168.99.100:8080 才行。
另外,请确保您用了-p 8080:8080
来映射端口,并检查宿主机是否开放了8080端口。
绝大多数情况下,您可能是没有正确配置CRAWLAB_API_ADDRESS
这个环境变量。这个变量是告诉前端应该通过哪个地址来请求API数据的,因此需要将它设置为宿主机的IP地址+端口,例如 192.168.0.1:8000
。接着,重启容器,在浏览器中输入宿主机IP+端口,就可以顺利登陆了。
请注意,8080是前端端口,8000是后端端口,您在浏览器中只需要输入前端的地址就可以了,要注意区分。
这些是demo爬虫,如果需要添加您自己的爬虫,请将您的爬虫文件打包成zip文件,再在爬虫页面中点击添加爬虫上传就可以了。
注意,Crawlab将取文件名作为爬虫名称,这个您可以后期更改。另外,请不要将zip文件名设置为中文,可能会导致上传不成功。
注意: v0.3.0版本已将基于Celery的Python版本切换为了Golang版本,如何部署请参照文档
如果您觉得Crawlab对您的日常开发或公司有帮助,请加作者微信 tikazyq1 并注明"Crawlab",作者会将你拉入群。或者,您可以扫下方支付宝二维码给作者打赏去升级团队协作软件或买一杯咖啡。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。