前言Crawlab是一款流行的分布式通用爬虫管理平台,由Crawlab开发团队开发维护。Crawlab自去年3月上线以来,以其极其强大的灵活性、简洁优雅的界面、稳健稳定的功能表现,深受爬虫工程师和开发者的喜爱和好评。现在它拥有近4kGithubstars和超过8k的Docker下载量。在最近的一项调查中,超过三分之一的受访者表示他们曾在生产环境中使用过Crawlab。对Crawlab不了解的同学可以参考以下相关文章或文档:GithubRepoCrawlabDocumentCrawlabDemoCrawlabv0.4.2爬虫管理平台发布(文件管理)Crawlabv0.4.1爬虫管理平台发布(可配置爬虫)Crawlab爬虫平台核心原理——分布式架构经过8个月的迭代和优化,Crawlab变得更加稳定易用,但也随之而来的是用户的建议和反馈。更大的痛点之一是爬虫的依赖安装。简单来说,由于Crawlab主要是Docker安装的,所以基础镜像只有一些爬虫和Crawlab相关的Python库。如果需要安装一些爬虫必须的依赖,比如数据库操作库pymysql等,就必须做一些hack。比如上传一个专门安装依赖的爬虫,或者根据Crawlab镜像构建包含所需依赖的镜像。这两种方法既不安全也不方便直观。因此,在最新的v0.4.3版本中,我们发布了更加方便的界面安装依赖的功能。下面就来介绍一下这个功能。依赖安装依赖安装是使用Crawlab时经常需要的一个需求。目前的临时解决方案都是通过黑客攻击。现在,我们最新的版本已经有了比较成熟的解决方案,就是在接口上操作安装依赖。在进入细节之前,我们先来了解一下一般爬虫工程师的主要编程语言。哪种语言最受欢迎?在开发依赖安装功能之前,我们首先需要确定爬虫世界中哪些(几种)语言比较流行。我们猜测Python是主要爬虫工程师使用的语言,因为流行和成熟的Scrapy爬虫框架和Python简单的语法和丰富的生态。于是,我们带着“你主要用什么语言写爬虫?(多选)”这个问题做了一个小调查。以下是调查结果。语言占比Python55.8%Golang12.9%Node.js11.7%Java11.0%PHP3.1%C/C++1.8%C#1.2%Shell1.2%其他1.2%可见,Python是爬虫界的绝对霸主,超过半数的人选择使用Python作为主要的爬虫编程语言。动态语言Node.js和静态语言Golang、Java平分秋色。这让我有点意外,因为Node.js有个爬虫神器Puppeteer可以爬取动态内容,而且写起来也比静态语言Golang和Java方便。这个结果可能是因为很多爬虫工程师都是兼职后端工程师,所以他们使用的是比较熟悉的后端静态语言。所以,Python是我们这次更新肯定会支持的语言(这里的“支持”并不是说其他??语言不能运行,而是需要安装额外的依赖)。其次,我们选择Node.js作为支持安装依赖项的第二种语言,因为它也非常灵活。我们会在以后的版本中开发对Golang、Java等静态语言等其他语言的依赖安装支持。如何使用依赖安装下面我们将介绍如何在Crawlab界面使用依赖安装。首先,我们需要导航到节点列表页面,点击节点的蓝色查看按钮(如下图所示)进入节点详情页面。进入节点详情页面后,点击“安装”选项卡,进入依赖安装页面。如果你在搜索栏中搜索相关的依赖库,你会得到一个类似的依赖列表。比如pip的相关依赖可以在Python中获取。点击“安装”开始pipinstall,稍等片刻,会收到安装成功(或失败)的提示信息;如果节点上已经存在依赖,会显示“卸载”按钮,点击即可开始卸载依赖,相当于pipuninstall。当然,其他语言对应的是它们对应的包管理操作,比如Node.js对应的是npm。点击“ViewInstalled”,可以看到节点上安装的依赖及其对应的版本,如下图所示。同样,点击“Uninstall”卸载依赖。由于Docker镜像上预装了Python(后面会介绍如何在Docker上预装Node.js)。点击“Node.js”选项卡,你会看到提示“Node.jsisnotinstalled,doyouintendtoinstallit?”。点击“安装”按钮,后台会开始安装nvm和Node.js8.12版本。然后您将看到与Python相同的界面。Docker预装编程语言为了方便爬虫开发者在Docker中实现Node.js爬虫应用,我们开发了配置Docker预装Node.js的功能。只要在启动时将环境变量CRAWLAB_SERVER_LANG_NODE设置为Y,然后启动镜像即可。例如下面的docker-compose.yml。version:'3.3'services:master:image:tikazyq/crawlab:latestcontainer_name:masterenvironment:CRAWLAB_API_ADDRESS:"http://localhost:8000"#后端API地址后端API地址,设置为http://:,端口为映射端口CRAWLAB_SERVER_MASTER:"Y"#是否为主节点为主节点,主节点为Y,工作节点为NCRAWLAB_MONGO_HOST:"mongo"#MongoDB主机地址MongoDB地址,在dockercompose网络中,直接引用服务名CRAWLAB_REDIS_ADDRESS:"redis"#Redis主机地址Redis的地址,在dockercompose网络中,直接引用服务名CRAWLAB_SERVER_LANG_NODE:"Y"#预装Node.jslocaleports:-"8080:8080"#前端端口映射-"8000:8000"#后端端口映射depends_on:-mongo-redisworker:image:tikazyq/crawlab:latestcontainer_name:workerenvironment:CRAWLAB_SERVER_MASTER:"N"CRAWLAB_MONGO_HOST:"mongo"CRAWLAB_REDIS_ADDRESS:"redis"CRAWLAB_SERVER_LANG_NODE:"Y"#预安装节点.jslocaledepends_on:-mongo-redismongo:image:mongo:latestrestart:always#volumes:#-"/opt/crawlab/mongo/data/db:/data/db"#使数据持久化#ports:#-"27017:27017"#向主机公开端口向主机公开接口redis:image:redis:latestrestart:always#volumes:#-"/opt/crawlab/redis/data:/data"#使数据持久化Persistence#ports:#-"6379:6379"#暴露端口给宿主机把接口暴露给宿主机不足的地方。我知道开发者会抱怨:批量安装为什么不上传requirements.txt或者package.json啊;为什么不支持环境持久化,每次都要重装;为什么不支持Java……我知道这些都是非常有用的功能,但是Crawlab的开发一直遵循敏捷开发和精益打磨的原则,不会过度开发一个功能,优先保证可行性,可用性、健壮性和稳定性。因此,在验证您的使用情况后,我们会逐步完善该功能,使其更加实用。更新内容以下是本次v0.4.3版本的更新详情。功能/优化依赖安装。允许用户在平台web界面中安装/卸载依赖项和添加编程语言(目前仅支持Node.js)。编程语言预装在Docker中。Docker用户可以通过设置CRAWLAB_SERVER_LANG_NODE为Y来预装Node.js环境。在爬虫详情页添加定时任务列表。允许用户在爬虫详情页面查看、添加、编辑定时任务。#360cron表达式与Linux一致。将表达式从6个元素更改为5个元素,与Linux一致。启用/禁用计划任务。允许用户启用/禁用计划任务。#297优化任务管理。允许用户批量删除任务。#341优化爬虫管理。允许用户在爬虫列表页面对爬虫进行过滤排序。添加中文版的CHANGELOG。在顶部添加一个Github星形按钮。错误修复定时任务。#423上传爬虫zip文件时出现问题。#403#407由于网络原因导致死机。#340产品规划Crawlab能发展到现在,离不开合理的产品规划。因此,我们在收集用户反馈的同时,也将比较重要的(至少我们认为比较重要的)特性整理出来,安排在了每个版本上。具体发布日期我们无法确认,但可以肯定的是,Crawlab开发团队会逐步迭代产品,让产品更加实用和便捷。社区如果您觉得Crawlab对您的日常发展或公司有帮助,请加作者微信tikazyq1并注明“Crawlab”,作者会拉您入群。欢迎在Github上Stars,如果遇到什么问题,欢迎在Github上提issue。此外,欢迎您为Crawlab做出开发贡献。