Crawlab 是一个基于 Golang 的分布式通用爬虫管理平台,能支持支持 Python、NodeJS、Java、Go、PHP 等多种编程语言以及 Scrapy、Selenium、Puppeer 等多种爬虫框架。Crawlab 的可配置爬虫又可以让你在不到 3 分钟内开发好一个简单的可配置爬虫。Crawlab 的宗旨是让爬虫变得简单。目前 Crawlab 已经有超过 4k Github Stars 以及近 10k Dockerhub Pulls,是增长最快也是最受欢迎的爬虫管理平台。下图是各个开源爬虫管理平台的 Github Star 增长曲线,其中红色的是 Crawlab。可以看到,虽然 Crawlab 是比较新的项目,但受欢迎程度在持续增长。
目前 Crawlab 的功能包括但不限于:任务监控、节点管理、爬虫管理、日志管理、定时任务、数据分析、可配置爬虫、在线文件编辑、依赖安装等等。虽然这些功能相较于其他爬虫管理平台已经是比较完善了,但对于企业级的应用却还有一定的差距,例如:缺少消息通知功能、没有异常监控功能、长任务支持不友好等等。因此,为了朝企业级应用更进一步,我们在本次的 v0.4.4 版本中推出了 消息通知 功能,能够让用户第一时间通过钉钉、企业微信、邮件收到任务报错或完成的消息,进一步增强任务监控能力。另外,为了让爬虫管理和集成变得更简单,我们在本次发布中还推出了 Crawlab SDK,让用户能够通过 CLI 命令行工具 轻松上传自定义爬虫和查看数据,同时也增强了 Scrapy 爬虫和 Python 一般爬虫的集成支持。其他优化包括增强的在线文件编辑和定时任务可视化编辑。
对爬虫管理平台不了解的同学,可以参考《如何快速搭建实用的爬虫管理平台》。对于 Crawlab 不了解的同学,请参考《 Crawlab 官方文档》。
监控报警是一个企业运维中不可或缺的一部分,服务器宕机、CPU 过载、作业失败,都应该第一时间让运维开发人员知道。如果一个大型互联网企业因为服务器宕掉,而没有立即处理的话,很可能导致巨大的损失。因此,消息通知是一个非常重要的功能,爬虫管理也不例外。当爬虫任务挂了,或者出现错误,爬虫工程师想第一时间了解情况,并及时作出响应和处理。如果没有消息通知,这是无法完成的。而通常的消息通知渠道包括:邮件、短信、电话、手机推送。在本次的更新中,我们实现了其中两个:邮件和手机推送(钉钉、企业微信)。
下面有消息通知的效果图。
Crawlab 支持 3 种消息通知触发模式:
您可以在 设置 页面中配置您的通知渠道和触发模式。
消息通知的配置非常简单,关于如何配置消息通知请参照 《官方文档》。如果有疑问,请加作者微信 tikazyq1 拉群讨论。
Crawlab 目前支持访问的媒介只是 Web 界面,用户必须通过到 Web 界面上进行按钮点击、输入等操作来完成与 Crawlab 的交互。这样做有个严重的问题:每次上传 自定义爬虫 必须要手动将爬虫文件 Zip 打包。这样做费时费力,而且对于 Scrapy 爬虫, Crawlab 要求在根目录下打包才能工作,这样很容易导致错误。这一方面说明 Crawlab 对 Scrapy 爬虫的支持不够,另外一个方面说明流程需要优化。
很多 Crawlab 的用户都反馈说不知道如何将爬虫抓取的结果集成到 Crawlab 中。这是因为我们给出的解决方案太过于复杂(要求存入同一个数据库、需要获取环境变量、需要指定 task_id
),初学者用户很难在短时间内理解如何操作。
基于上面的两个痛点,我们开发了 Crawlab SDK,一个简化爬虫上传、集成流程的工具。目前 Crawlab SDK 只支持了 Python,其他语言例如 Golang、Node.js 、Java 我们会在后面陆续发布。
安装 Crawlab SDK 非常简单,只需要保证您安装了 pip
包管理工具,然后执行以下命令。
pip install crawlab-sdk
安装好 Crawlab SDK 之后,您就可以在命令行中使用 crawlab
命令了。
如何使用 CLI 和利用 CLI 上传爬虫,您可以参考 《官方文档》。
Crawlab SDK 的 Utility Tool 可以帮助用户更好的集成爬虫,例如保存爬虫数据等等。
Scrapy 集成
在 settings.py
中找到 ITEM_PIPELINES
(dict
类型的变量),在其中添加如下内容。
ITEM_PIPELINES = {
'crawlab.pipelines.CrawlabMongoPipeline': 888,
}
然后,启动 Scrapy 爬虫,运行完成之后,您就应该能看到抓取结果出现在 任务详情-结果 里。
Python 爬虫集成
将下列代码加入到您爬虫中的结果保存部分。
# 引入保存结果方法
from crawlab import save_item
# 这是一个结果,需要为 dict 类型
result = {'name': 'crawlab'}
# 调用保存结果方法
save_item(result)
然后,启动爬虫,运行完成之后,您就应该能看到抓取结果出现在 任务详情-结果 里。
不多文字介绍了,一图胜千言。
在线文件编辑的详细使用信息请参考《官方文档》。
不多文字介绍了,一图胜千言。
定时任务的详细使用信息请参考《官方文档》。
相信很多部署过 Crawlab 的 Docker 用户都遇到过登录按钮转圈圈或报登录出错的信息。这绝大多数都是因为 CRAWLAB_API_ADDRESS
这个环境变量出了问题。之前在 Docker 部署 中,如果需要在服务器上部署,CRAWLAB_API_ADDRESS
这个环境变量是强制要求的,否则默认就会以 http://localhost:8000
作为默认 API 地址,从而导致错误。造成这样问题的根本原因是前后端分离的架构,虽然方便了开发流程,但是让部署配置变得更复杂。
在本次更新中,我们通过 Nginx 的 代理转发 和 URL 重写 将 API 的请求地址改为了默认的 /api
,因此每次请求 API 的时候会自动去找 http://<your_ip>:<your_port>/api
,从而不再依赖 CRAWLAB_API_ADDRESS
这个变量。这样一定程度上降低了部署难度。
CRAWLAB_API_ADDRESS
.nil retuened
错误.以下是 Crawlab 后面的产品规划。这个规划不一定是最终确定的版本,后面根据用户反馈和开发组的时间安排(例如有成员要花时间买房、找老婆、生孩子)做一定调整。当然,也欢迎大家随时提供反馈和建议。
如果您觉得 Crawlab 对您的日常开发或公司有帮助,请加作者微信 tikazyq1 并注明 "Crawlab",作者会将你拉入群。欢迎在 Github 上进行 star,以及,如果遇到任何问题,请随时在 Github 上提 issue。另外,欢迎您对 Crawlab 做开发贡献。