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

前言

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

Crawlab 还不了解的同窗,能够参考如下相关文章或文档:node

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

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

依赖安装

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

哪一个语言最受欢迎?

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

语言 占比
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 更方便。这样的结果多是由于,爬虫工程师有很多由后端工程师兼职,所以采用了比较熟悉的后端静态语言。sql

所以,Python 是咱们此次更新绝对会支持的语言(这里的“支持”不表明其余语言不能运行,只是须要另外安装依赖)。其次,咱们选择了 Node.js 做为第二个支持安装依赖的语言,由于它的灵活性一样很高。对其余语言例如 Golang 和 Java 这样的静态语言的依赖安装支持,咱们将放到后面的版本再开发。docker

如何使用依赖安装

下面咱们将介绍如何在 Crawlab 界面上使用依赖安装。数据库

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

进入节点详情页以后,点击“安装”标签,进入依赖安装页面。若是在搜索栏中搜索相关的依赖库,将获得相近的依赖列表。例如,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 作开发贡献。

相关文章
相关标签/搜索