爬虫管理平台Crawlab v0.4.3发布(界面上点几下就可安装pip或npm依赖)

前言

Crawlab 是一款受人欢迎的分布式通用爬虫管理平台,由 Crawlab 开发组 开发和维护。自去年 3 月份上线以来,Crawlab 因为极其强大的灵活性、简单精美的操作界面以及健壮而稳定稳定的功能表现,不断受到爬虫工程师和开发者的喜爱和好评,如今已经有了近 4k Github 标星和超过 8k Docker 下载。在最近的一次调研中,超过三分之一的参与调查者都表示已经将 Crawlab 应用于了生产环境。

Crawlab 还不了解的同学,可以参考以下相关文章或文档:

经过 8 个月的迭代和优化,Crawlab 已经变得更加稳定和易用,不过随之而来的也是用户的建议和反馈,其中一个比较大的痛点是爬虫的依赖安装。简单来说,由于 Crawlab 主要是由 Docker 来安装,基础镜像只有 Python 的一些与爬虫和 Crawlab 相关的库,如果需要安装一些爬虫必要的依赖,例如数据库操作库 pymysql 等等,就必须做一些 hack,例如上传一个安装依赖的特殊爬虫,或者以 Crawlab 镜像为基础,构建出包含需要的依赖的镜像。这两种方式,既不安全,也不方便和直观。

因此,在最新的版本 v0.4.3 中,我们发布了更方便的在界面上安装依赖的功能。下面我们介绍一下这个功能。

依赖安装

依赖安装是经常使用 Crawlab 经常需要的需求,目前的临时解决方案都是通过 hacking 的方式。而现在,我们的最新版本已经有比较成熟的解决方案,也就是在界面上操作安装依赖。在进入细节之前,我们先了解下一般爬虫工程师的主选编程语言。

哪个语言最受欢迎?

在开发依赖安装功能以前,我们首先需要确定哪(几)种语言是爬虫界中比较受欢迎的。我们猜测 Python 是主要的爬虫工程师用的语言,这是因为大红大紫的成熟的 Scrapy 爬虫框架以及 Python 的简单语法和丰富的生态。于是,我们做了一个小小的调查,调查问题为“您主要用什么语言编写爬虫?(多选)”。以下是调查结果。

语言 占比
Python 55.8%
Golang 12.9%
Node.js 11.7%
Java 11.0%
PHP 3.1%
C/C++ 1.8%
C# 1.2%
Shell 1.2%
其他 1.2%

可以看到,Python 是爬虫界的绝对霸主,超过一半的人选择用 Python 作为主要的爬虫编程语言。动态语言 Node.js 和静态语言 Golang、Java 各自平分秋色。这让我有些诧异,因为 Node.js 有爬虫神器 Puppeteer 来抓取动态内容,而且也编写也比静态语言 Golang 和 Java 更方便。这样的结果可能是因为,爬虫工程师有不少由后端工程师兼职,因此采用了比较熟悉的后端静态语言。

因此,Python 是我们这次更新绝对会支持的语言(这里的“支持”不代表其他语言不能运行,只是需要另外安装依赖)。其次,我们选择了 Node.js 作为第二个支持安装依赖的语言,因为它的灵活性同样很高。对其他语言例如 Golang 和 Java 这样的静态语言的依赖安装支持,我们将放到后面的版本再开发。

如何使用依赖安装

下面我们将介绍如何在 Crawlab 界面上使用依赖安装。

首先我们需要导航到节点列表页,点击一个节点的蓝色查看按钮(如下图),进入节点详情页。

进入节点详情页之后,点击“安装”标签,进入依赖安装页面。如果在搜索栏中搜索相关的依赖库,将得到相近的依赖列表。例如,Python 中可以得到 pip 的相关依赖。点击“安装”开始 pip install <package_name>,并稍等片刻,就会收到安装成功(或失败)的提示信息;如果该依赖已经在该节点上存在,则会显示“卸载”按钮,点击则可以开始卸载该依赖,相当于 pip uninstall <package_name>。当然,其他语言对应其所对应的包管理操作,例如 Node.js 对应 npm。

点击“查看已安装”,可以看到该节点上已安装的依赖以及其对应的版本,如下图。同样,点击“卸载”可以卸载该依赖。

由于 Python 是 Docker 镜像上预装的(待会儿会介绍如何在 Docker 上预装 Node.js)。点击 “Node.js” 标签,会看到提示说“Node.js 还没有安装,您是否打算安装它?”。点击“安装”按钮,后台会开始安装 nvm 和 Node.js 8.12 版本。然后就会看到跟 Python 一样的界面了。

Docker 中预装编程语言

为了方便爬虫开发者在 Docker 中的 Node.js 爬虫应用,我们开发了在 Docker 中配置预装 Node.js 的功能。只需要在启动的时候设置环境变量 CRAWLAB_SERVER_LANG_NODEY,然后启动镜像就可以了。例如如下 docker-compose.yml

version: '3.3'
services:
  master: 
    image: tikazyq/crawlab:latest
    container_name: master
    environment:
      CRAWLAB_API_ADDRESS: "http://localhost:8000"  # backend API address 后端 API 地址,设置为 http://<宿主机IP>:<端口>,端口为映射出来的端口
      CRAWLAB_SERVER_MASTER: "Y"  # whether to be master node 是否为主节点,主节点为 Y,工作节点为 N
      CRAWLAB_MONGO_HOST: "mongo"  # MongoDB host address MongoDB 的地址,在 docker compose 网络中,直接引用服务名称
      CRAWLAB_REDIS_ADDRESS: "redis"  # Redis host address Redis 的地址,在 docker compose 网络中,直接引用服务名称
      CRAWLAB_SERVER_LANG_NODE: "Y"  # 预安装 Node.js 语言环境
    ports:    
      - "8080:8080" # frontend port mapping 前端端口映射
      - "8000:8000" # backend port mapping 后端端口映射 
    depends_on:
      - mongo
      - redis
  worker:
    image: tikazyq/crawlab:latest
    container_name: worker
    environment:
      CRAWLAB_SERVER_MASTER: "N"
      CRAWLAB_MONGO_HOST: "mongo"
      CRAWLAB_REDIS_ADDRESS: "redis"
      CRAWLAB_SERVER_LANG_NODE: "Y"  # 预安装 Node.js 语言环境
    depends_on:
      - mongo
      - redis
  mongo:
    image: mongo:latest
    restart: always
    # volumes:
    #   - "/opt/crawlab/mongo/data/db:/data/db"  # make data persistent 持久化
    # ports:
    #   - "27017:27017"  # expose port to host machine 暴露接口到宿主机
  redis:
    image: redis:latest
    restart: always
    # volumes:
    #   - "/opt/crawlab/redis/data:/data"  # make data persistent 持久化
    # ports:
    #   - "6379:6379"  # expose port to host machine 暴露接口到宿主机

不足的地方

我知道开发者们会吐槽:为何不做上传 requirements.txtpackage.json 批量安装的功能啊;为何不支持环境持久化,每次都要重新安装啊;为何不支持 Java 啊... 我知道这些都是很实用的功能,但 Crawlab 的开发向来都是遵从敏捷开发和精益打磨的原则,不会过度开发一个功能,优先保证可行性、可用性、健壮性和稳定性。因此,在验证了大家的使用情况后,我们会逐步完善这个功能,让其变得更加实用。

更新内容

以下是本次版本 v0.4.3 的更新详情。

功能 / 优化

  • 依赖安装. 允许用户在平台 Web 界面安装/卸载依赖以及添加编程语言(暂时只有 Node.js)。
  • Docker 中预装编程语言. 允许 Docker 用户通过设置 CRAWLAB_SERVER_LANG_NODEY 来预装 Node.js 环境.
  • 在爬虫详情页添加定时任务列表. 允许用户在爬虫详情页查看、添加、编辑定时任务. #360
  • Cron 表达式与 Linux 一致. 将表达式从 6 元素改为 5 元素,与 Linux 一致.
  • 启用/禁用定时任务. 允许用户启用/禁用定时任务. #297
  • 优化任务管理. 允许用户批量删除任务. #341
  • 优化爬虫管理. 允许用户在爬虫列表页对爬虫进行筛选和排序.
  • 添加中文版 CHANGELOG.
  • 在顶部添加 Github 加星按钮.

Bug 修复

  • 定时任务问题. #423
  • 上传爬虫zip文件问题. #403 #407
  • 因为网络原因导致崩溃. #340

产品规划

Crawlab 能发展到现在,离不开合理的产品规划。因此,在收集用户反馈的同时,我们也整理了比较重要的(至少我们认为比较重要的)功能,将它们安排在各个发版上。具体发版日期我们无法确定,但可以肯定的是,Crawlab 开发组 会逐步迭代产品,将产品打造得更加实用和便捷。

社区

如果您觉得 Crawlab 对您的日常开发或公司有帮助,请加作者微信 tikazyq1 并注明 "Crawlab",作者会将你拉入群。欢迎在 Github 上进行 star,以及,如果遇到任何问题,请随时在 Github 上提 issue。另外,欢迎您对 Crawlab 做开发贡献。

Image placeholder
buckcao
未设置
  91人点赞

没有讨论,发表一下自己的看法吧

推荐文章
企业数字化管理平台 “让老树开新花”

在叉车领域,安徽合力(以下简称合力)是一家接近百年的老厂,已成立61年。一般遇到这种“老字号企业”,我们的敬佩之情会油然而生!能在商海沉浮中坚持这么久,这本身就是值得骄傲,说明这家企业一定掌握着某种独

NutsDB v0.5.0 发布~

项目地址 https://github.com/xujiajun/nutsdb Changelog [Newfeature]SupportEntryIdxMode:HintBPTSparseIdxMo

Swoftcli: 发布 v0.1.5 版本

Swoftcli发布v0.1.5版本 修复一些bug 类生成支持ws中间件,tcp中间件 优化应用创建命令 Github Repo:https://github.com/swoft-cloud/

Swoftcli: 发布 v0.1.5 版本

Swoftcli发布v0.1.5版本,主要改进:修复一些bug 类生成支持ws中间件,tcp中间件 优化应用创建命令 GithubRepo:https://github.com/swoft-cloud

Jenkins CLI 命令行 v0.0.23

本文首发于:Jenkins中文社区作者:ZhaoXiaojieJenkinsCLI在参加2019年谁是最受欢迎的中国开源软件投票,如果您已经是JenkinsCLI的用户,请点击下面的链接帮忙投上一票。

2018Q4全球企业WLAN市场加速增长

据IDC发布的全球无线局域网季度跟踪报告显示,2018年第四季度(4Q18),全球消费者和企业全球无线局域网(WLAN)市场同比增长8.9%,全年增长4.3%。企业板块同比增长10.3%,达到17亿美

2019年第一季度企业WLAN市场同比增长7.1%

2019年第一季度(1Q19),消费者和企业全球无线局域网(WLAN)市场份额同比增长6.9%,达到24亿美元。根据IDC发布的全球季度WLAN追踪结果显示,企业级WLAN市场在1Q19同比增长7.1

5G迎来黄金时代 WLAN市场的大动作

5G已经到了呼之欲出的时候,WLAN市场又有什么大动作呢?2019Navigate领航者峰会于近日在重庆完美落幕。回顾此届大会,作为中国企业级WLAN市场的领导者,新华三无线领域有哪些重磅发布?展望未

[译] 是的,它是 npx,不是 npm

原文: Yes,it’snpx,notnpm—thedifferenceexplained 最近,当我开始学习React的时,看到包括我在内的很多人当看到 npx 而不是 npm 时很困惑。一些人看的

玩转 GitHub Actions,简化 npm 发布流程

Github最近添加了一项名为GithubActions的新功能,为我们带来了一套强大的工作流系统,可以处理各种各样的任务。我们在发布Node.js包时可以使用Actions自动运行测试,然后自动将

阿里云为什么有底气喊出“全面上云的拐点到了”?

摘要:拐点,又称反曲点,在高等数学里,拐点指的是凹凸性变化的点,在生活中借指趋势发生变化的点。(例如:经济运行出现回升拐点)虽然上云是大势所趋,但企业全面上云可能还需要一些时日,这或许是绝大部分从业者

拐点已至,阿里云进入All in Cloud全面上云时代!

当新旧设备交替势不可挡,当云的基础设施开始超过传统的数据中心,一个新时代开始了。在这样的时代里,以数据、计算、智能为主要特征的新一代信息技术,开始成为企业数字化转型的核心动力。对于所有云服务商来说,就

[扩展推荐] Laravue —— 漂亮的 Laravel 管理界面

介绍几个月前我尝试为我的项目寻找新的解决方案,我已经使用Vue构建了一个单页应用(使用这个非常棒的框架,使用LaravelLumen作为API网关,使用LaravelPassport作为SSO服务器)

cnpm如何安装vue?

如何使用cnpm安装vue?步骤1:确保你电脑上安装了最新版本的Node.js。步骤2:安装淘宝镜像(国内使用npm速度很慢,可以使用淘宝定制的cnpm(gzip压缩支持)命令行工具代替默认的npm)

Python 项目中使用 pipenv 来管理扩展依赖

什么是『pipenv』? 下面列出了一些其他语言包管理工具: Rubybundler PHPcomposer NodeJSnpm yarn Rustcargo 如果您就知道上面列出的其中

飞天 AI 平台重磅发布!阿里拥抱 AI 这五年

2014年,一个名为“iDST”的神秘部门的诞生开启了阿里的人工智能新征程,5年后,初长成的达摩院成为了阿里AI崛起的代表性力量。如今,阿里已跻身全球人工智能技术研发的第一梯队,成为时下这AI技术洪

Kubernetes1.14 版发布,增强了云原生平台的Windows节点支持

Kubernetes1.14GA版本,是开源云原生平台Kubernetes在2019年的一次重大更新。自3月25日开始,这一版本正式推出,供开发者全面使用。  Kubernetes,由云原生计算基金会

DevOps平台之一键发布设计

引言:大型项目协同是DevOps要面对的一个重要场景,其中多项目发布上线协同,更是一个重要关键场景,一键发布就是为了解决这个场景而生的。本文主要介绍一键发布的界面设计、模型设计以及接口设计等。目录:1

NPM 常用命令

源: 设置加速源:npmconfigsetregistry=:{uri}可选源:https://registry.npm.taobao.org, 配置: 设置:npmconfigset[--gl

NPM run watch-poll 一直报错求解

按照教程的操作 第一步删除node_modules 第二步yarnconfigsetregistryhttps://registry.npm.taobao.org 第三步yarninstall--no

如何用npm下载react

如何用npm下载react●首先我们需要安装nodejs环境【Node.js安装教程】我们可以在cmd中输入node-v和npm-v来检测是否安装成功。node-v npm-v当两条命令都成功的输出了

Ubuntu常用技巧:npm下载很慢的超简单解决方法

在使用npm下载时,速度特别特别慢,等了半小时还是纹丝不动:尝试了一些方法,效果不是很明显,最终发现一种简单有效的方法:1.终端输入命令,显示当前的镜像地址:npmgetregistry2.再输入命令

我哪里配置错误,为什么每次都无法正常跳转到支付宝的支付界面?

我每次学这套课程,都卡在这里,过不去。心里好难受~ 以下是我的配置整个过程:以下命令都执行过了。phpartisantinker phpartisanconfig:clear >>>config('p

怎么用react写界面

怎么用react写界面用react写页面,官方的做法是采用jsx语法,JSX是一种JavaScript的语法扩展,运用于React架构中,其格式比较像是模版语言,但事实上完全是在JavaScript内

Go语言高级编程_6.7 分布式爬虫

6.7分布式爬虫 互联网时代的信息爆炸是很多人倍感头痛的问题,应接不暇的新闻、信息、视频,无孔不入地侵占着我们的碎片时间。但另一方面,在我们真正需要数据的时候,却感觉数据并不是那么容易获取的。比如我们