前言
开发产品永远都是既痛苦,又开心的事情。一方面因为不了解用户真实需求、害怕闭门造车、担心技术无法实现而痛苦;另一方面,却会因为取得小小成就、获得用户认可、不断帮助用户解决问题而开心,从而继续坚持下去。Crawlab 就是这样让我既痛苦又开心的开源项目。它从去年 3 月份提交第一次 commit,到最近,已经在 Github 上积攒了 5k Star,成长为了最受欢迎的开源爬虫管理平台。其中,Crawlab 多次上榜到 Github Trending,不断被全球的开发者所认识了解;同时,也被码云 Gitee、开源中国所收录,让更多国内开发者所熟知。社区也不断完善,微信群成员已接近 1.2k,每天都有人在上面各种咨询问题和交流经验。同时 Github 上也有很多热心用户在上面提出各种 Issue,帮助我们优化产品。
从最开始的 Flask + Celery 架构,到如今用 Golang 自研开发调度引擎,经历了很多次大大小小的迭代。产品不断成熟的同时,也在不断发展。相信不久将衍生出更多实用的功能,包括用户们提出的各种很好的反馈建议。
下图是 Crawlab 的 Github 累计 Star 趋势图,可以看出 Crawlab 已达到 5k Star 的过程中经历了两次大的增长以及不断的小规模增长。
本文的目的主要是记录一下自己和小伙伴们一起努力的里程碑。去年 8 月份的时候(8 个月前),我写了一篇文章, 《如何打造一个上千Star的Github项目》,探讨了如何获取 Github 的关注度,打造受人欢迎的产品。
项目简介
Crawlab 是基于 Golang 的分布式爬虫管理平台,支持多种编程语言以及多种爬虫框架。对爬虫管理平台不了解的同学,可以参考这篇文章,《如何快速搭建实用的爬虫管理平台》,里面有对爬虫管理平台详细的介绍。
项目自 2019 年 4 月份上线以来受到爬虫爱好者们和开发者们的好评,超过一半的使用者表示已经在用 Crawlab 作为公司的爬虫管理平台。经过近数月的迭代,我们陆续上线了 定时任务、数据分析、可配置爬虫、SDK、消息通知、Scrapy 支持、Git 同步 等功能,将 Crawlab 打造得更加实用,更加全面,能够真正帮助用户解决爬虫管理困难的问题。
Crawlab 主要解决的是大量爬虫管理困难的问题,例如需要监控上百个网站的参杂 scrapy
和 selenium
的项目不容易做到同时管理,而且命令行管理的成本非常高,还容易出错。Crawlab 支持任何语言和任何框架,配合任务调度、任务监控,很容易做到对成规模的爬虫项目进行有效监控管理。
Crawlab 可以很容易的将开发者的爬虫集成进来。配合 CLI 工具,您可以将任何爬虫项目上传到 Crawlab,并被同步到所有的节点上,形成分布式架构。另外,Crawlab 自带的 SDK 让您可以非常轻松的将抓取到数据可视化到 Crawlab 界面中。您可以在界面上查看、下载抓取到的任务结果(如下图)。
项目发展
Crawlab 到如今已经有 1 年了,在 Github 上的 Star 数量已过半万,但这还不能说明任何问题。之前有网友指出,Github 上的 Star 数并不能说明问题,其实在淘宝上也可以买到 Star... 另一个有趣的事实是,很多在 Github 上成千上完 Star 数的作品,竟然是 Markdown 项目。什么是 Markdown 项目?也就是这个项目中没有多少可执行的代码文件,绝大多数是写满技术知识的 Markdown 文件,可以是面试题,可以是知识整理,也可以是唐诗宋词,等等。这些 Markdown 项目的盛行,反映了开发者们的知识焦虑。其实,有时候,专心使用一个项目,多阅读理解一下源码,甚至自己动手码几行代码,也是能不断提高自己的。我是一个野生程序员,不喜欢底层原理和理论推导,喜欢拿起键盘,埋头开(fu)发(zhi)产(zhan)品(tie)。因此,我喜欢在产品中找到用户的痛点,并用技术的方式加以解决。
下图是 Crawlab 项目的发展历程。
可以看到,项目初期是用 Flask + Celery 来完成分布式调度逻辑的,这其实是无奈之举。因为当时我最熟悉的语言是 Python,不会 Java、不会 Golang、不会 C++,因此选择了当时上手最快的 Python 作为主力编程语言,为后来的更换框架埋下伏笔。
积攒了首批用户之后,他们提出了各种各样的意见和反馈。其中有用 Docker 来部署的建议,这成为了后来部署 Crawlab 的首选。还有人提出可配置爬虫的概念(当时不是这个名字,可配置爬虫是我取的名字),我也用 Python 把它实现了出来。
但非常令人恼火的是,在 v0.2.x 版本的时候,定时任务经常出各种各样的 Bug:有时会重复执行两次或多次;有时会不按时间执行;有时甚至压根漏掉执行。更让人担忧的是,当爬虫的数量增加的时候,后端的压力开始加大,每次返回结果需要耗费 1 秒甚至几秒的时间。连我自己使用起来都很难受。于是,我开始从根本上思考,是不是 Python 这一套架构根本满足不了我们的需求。
而恰巧我当时在掘金小册上购买了关于 Golang 学习的课程,自然而然的想到应该用 Golang 来重构 Crawlab 的后端应用。因此,在边学边练的情况下,我将 Crawlab 从 Python 版本重构为了 Golang 版本,并发布为了 v0.3 版本。重构后的 Crawlab 像是升了好几级一样,不管是从性能还是稳定性上轻轻松松碾压 Python 版本。Bug 不再多了,响应也不再延迟了,并发数也高了。更好的一点是,Golang 是静态类型语言,可以非常方便的规避一些因为类型产生的低级错误(成本是需要更多的代码量)。我觉得用 Golang 重构 Crawlab 是这个项目中最成功的决定。
相比于 Golang 重构带来的受欢迎效应,我觉得 v0.4.x 相对来说就没那么直接了。很多 v0.4.x 的迭代功能都是根据用户的反馈来的,包括消息通知、权限管理、界面安装依赖、Scrapy 支持等等。这些功能都是针对许多需要在企业中应用爬虫管理平台的用户开发的。现在我不知道有多少企业在真正使用 Crawlab,但我相信随着 Crawlab 的不断完善,跟多的中小企业、甚至是大型企业可以开箱即用的将 Crawlab 部署使用起来,进一步推广给其他有需求的用户。
项目经验
Crawlab 带来的经验教训非常多。很多人都在问我,是什么让你坚持了这么久来开发一个免费产品呢?又有很多人也在问我为什么不开发商业版呢?这些问题我觉得都是自然而然的,也是理所当然的。就我来看,要做好一个开源项目,光光是有这个 idea 是不行的,当然靠此赚钱的这种思想更会将项目带往歧途。以下几点,是我觉得打造一个受欢迎的开源项目的要素。
寻找痛点,并尝试解决
很多人在工作生活自身有不少痛点。如果能发现这些痛点(注意,是 “痛”,而不是 “痒”),就很可能会发现一个解决它的机会。我们可以从身边来尝试寻找痛点。例如,Crawlab 就是在思考一个工作问题时诞生的。我所在的部门有上百个爬虫,其中包括了 Selenium 爬虫和其他类型的爬虫。我们当时的爬虫管理方式和实现方式都有非常多的局限性,导致了扩展性不高、排查异常困难等问题。我们有一个 Web UI 界面,但是仅仅局限于业务,没有专注于爬虫本身。作者当时思考,是不是只有我们公司才遇到这个问题,还是这个问题是一个普遍问题,几乎每个需要爬虫的公司都会遇到。
当然,仅仅是找到这个痛点还不够,还需要验证它。例如,我为了验证之前这个假设,花了半个月的时间做了一个最小可行性产品(MVP),Crawlab v0.1 版本,只有最基本的执行爬虫脚本的功能。结果,第一版发布后陆陆续续收到正面反馈,也有不少改进建议。第一天的 Star 数就达到了 30,后面两天涨到了100。这验证了我的假设,爬虫管理困难这个问题是普遍存在的,大家都觉得 Crawlab 是个不错的 idea,愿意来尝试。这才开始让作者更有动力不断完善这个产品。所以,从身边的问题出发是个很好的开始。
通过用户调研完善产品
很多人开发产品都是闭门造车,企图一厢情愿的让用户爱上他们的产品。这对于技术人员来说是一个陷阱,我们需要时刻警惕不要陷入敝帚自珍的境地无法自拔。怎么来了解用户需求呢?一个很有效的方法就是用户调研。
在 《如何打造一个上千Star的Github项目》 中,我提到有两种用户调研的方式。一种是直接询问。我经常在微信群中询问用户关于 Crawlab 的使用情况,是否有什么可以提升的,哪些地方使用比较困难,有什么 Bug,之类的问题。很多时候,我都能够获得相应的反馈,有时而且是比较重要的反馈。另一种方式是问卷调查。这种方式比较客观,可以定量的获取用户的使用状况,这对我们了解用户使用情况是非常有帮助的。例如,我会定期利用问卷星设计调查问卷并投放到微信群里,通常能收到几十上百个答案。这个样本对调查来说已经足够,而且问卷星可以帮助分析各个问题的数据分布情况,能够一目了然看到使用和需求情况。
不要低估产品推广的力量
其实这一部分就是营销和运营。当产品推出时,应该第一时间让用户知道并试用你的产品。因为这样才能即时获得用户反馈,才有机会不断完善你的产品。推广的渠道多种多样。第一,可以是写文章,每次发布的时候,我会在掘金、SF、V2ex、开源中国等平台上写发布文章,介绍新的功能,以及产品规划等等,让更多的用户了解并试用 Crawlab。第二,需要做SEO,Crawlab 的文档网站被推到了百度索引,让百度能够不断收录 Crawlab 的页面,并根据其内部的算法将品牌词例如 “Crawlab”、“爬虫管理平台” 排到前几位。第三,打造 Demo 平台,这是用户能够试用产品的最简单的方式,用户会第一眼看到你的产品,根据外观、功能来决定是否要进一步安装、使用,实践证明,这是非常有效的手段。
总结
爬虫管理平台 Crawlab 到如今已经进入第二年。Crawlab 是一个后起之秀,相比于前辈 Gerapy、SpiderKeeper、ScrapydWeb 来说,更加年轻,也更加灵活和实用。因此才会有这么多人来尝试使用 Crawlab。打造开源产品是个需要长期经营的事业,那种一夜冲天的 “暴发户” 不是人人都能够创造的。因此,需要保持耐心以及匠人精神。所谓匠人精神,不是将产品打造得多完美,而是将产品打造得更接地气,更加使用友好,更能让用户满意,更能解决用户的问题,这才算是匠人精神。所以,我们不能闭门造车,一味的追求技术上的完美,而忽略了用户真正的问题。Crawlab 在解决用户的问题上,还有很长的道路需要走。但我们不担心,因为我们现在有强大的开发组,不断成长的社区,和不断给出反馈意见的用户。相信第二年,Crawlab 会解决更多用户的问题,让爬虫变得简单,迎来第二个 5k Star。
希望本篇文章对您的工作和学习有所帮助,有任何疑问,请加作者微信 tikazyq1,或者在底部留言提问,作者将尽力回答。谢谢!
参考
- Github: https://github.com/crawlab-te...
- Demo: https://crawlab.cn/demo