开发产品永远都是既痛苦,又开心的事情。一方面因为不了解用户真实需求、害怕闭门造车、担心技术无法实现而痛苦;另一方面,却会因为取得小小成就、获得用户认可、不断帮助用户解决问题而开心,从而继续坚持下去。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,或者在底部留言提问,作者将尽力回答。谢谢!
1
necodba 2020-04-07 08:00:00 +08:00
竟然遇到了野生的大佬。已经关注项目已久了
|
3
Showfom 2020-04-07 08:30:41 +08:00
支持一下大佬
|
5
zhw2590582 2020-04-07 08:34:04 +08:00 via iPhone
支持一下
|
6
pomelotea2009 2020-04-07 08:47:47 +08:00 via Android
支持,楼主付出了很多!
|
7
008px 2020-04-07 08:52:59 +08:00 via Android
赞一个
|
8
smallpython 2020-04-07 09:18:06 +08:00
做一个这样的项目是不是前端的工作量最多
|
9
tikazyq OP @smallpython 作为一个前端工程师来说,前端工程量并不大,相对来说后端的复杂度更大一些
|
10
jatesun 2020-04-07 09:34:02 +08:00
佩服楼主,拜读一下
|
11
jiezhi 2020-04-07 09:36:01 +08:00
Star+1
|
14
cxshun 2020-04-07 09:39:26 +08:00
Star+1,楼主牛啤
|
15
jackom 2020-04-07 09:42:41 +08:00 via iPhone
支持大佬
|
17
luzihang 2020-04-07 09:45:22 +08:00
持续赞贴
|
19
gogo88 2020-04-07 09:51:30 +08:00 via iPhone
膜拜大佬
|
20
tcfenix 2020-04-07 10:46:44 +08:00
给一个建议,demo 界面建议直接把 admin admin 默认放在输入框里面
底下一行字比较小,容易被忽略 |
21
tcfenix 2020-04-07 10:49:45 +08:00
管理后台整体的完成度很高,楼主你很厉害,加油!
|
23
ShuoHui 2020-04-07 10:56:01 +08:00 via iPhone
好东西👍楼主大佬
|
25
cndydb 2020-04-07 11:02:36 +08:00
这后台模板牛
|
26
tikazyq OP |
27
wangchengwu 2020-04-07 11:07:36 +08:00
膜拜大佬! 666666
|
28
ddzzhen 2020-04-07 11:09:37 +08:00 via Android
点赞+恭喜,不断改进的产品就是好产品!
|
29
leowy 2020-04-07 11:09:40 +08:00
star 了学习学习
|
30
ignore 2020-04-07 11:10:23 +08:00
终于不是 markdown
|
31
tikazyq OP |
33
DelayNoMay 2020-04-07 11:27:47 +08:00
收藏了,然后准备学(chi)习(hui)
|
34
ArJun 2020-04-07 11:34:25 +08:00
佩服大佬,还是用 go 写的
|
35
hahajing2019 2020-04-07 11:36:17 +08:00
去年 8 月就关注这个项目了,是我看的第一个 golang 开源项目,强烈支持
|
36
encro 2020-04-07 11:41:38 +08:00
想问下,有盈利了吗?
|
37
encro 2020-04-07 11:43:52 +08:00
很有产品思维,不错。
|
38
tikazyq OP @DelayNoMay 源码质量还是很高的,适合学习
|
39
tikazyq OP |
41
aladdindingding 2020-04-07 11:55:00 +08:00
想问一下 一个 master 最多可以管理多少个 node 节点呢 是怎么下发命令让 node 节点运行的
|
42
lohiecan 2020-04-07 11:59:51 +08:00 via Android
厉害了
|
43
tikazyq OP @aladdindingding 还没有测试过 master 管理 worker 节点的极限(因为没有这么多资源。。。),用户目前来看管理 10 个节点是没任何问题的
节点之间的交互是通过 redis 来完成,主要技术用了消息队列、pubsub 以及延迟队列 |
44
stille 2020-04-07 12:05:58 +08:00
收藏了...感觉日后肯定用得着.
|
46
hackk 2020-04-07 15:04:41 +08:00
star 了一个,支持!
|
48
longgediyi999 2020-04-07 15:08:53 +08:00
厉害厉害 很好看
|
49
jayrome 2020-04-07 15:10:22 +08:00
支持+马克
|
50
ice2neet 2020-04-07 15:19:35 +08:00
支持一下
|
51
Fizzyi 2020-04-07 15:27:59 +08:00
支持,已经在公司开始用起来了
|
52
tikazyq OP |
54
purensong 2020-04-07 15:31:24 +08:00
做的很用心,不过我是第一次接触,佩服大佬。提个问题,demo 地址打开后我下载了一个文件(原来爬好的)下载出来是 csv,打开中文是乱码, 预览的表格数据还是中文。https://crawlab.cn/demo#/tasks/5cb2fd44-88c6-4f21-9d88-85f3cf5c4930
|
55
shenkai600 2020-04-07 15:33:45 +08:00
星你项目的时候还只有 1500 个星呢。。 很不错哟
|
56
Mohanson 2020-04-07 15:39:18 +08:00 via Android
支持一下
|
60
tikazyq OP @shenkai600 多谢加🌟
|
61
laminux29 2020-04-07 16:17:44 +08:00
1.这类东西其实根本不需要在意前端,前端直接输出为 excel 就行了。
2.这种东西的技术难度在后端,后端的核心技术难度在于,如何反爬,以及如何高性能地对 url 去重。 |
62
tikazyq OP @laminux29
1. 对于第一个问题我持保留意见,因为可视化是个很强大的特性,不能忽视 2. 对于爬虫程序本身来说,crawlab 的 project scope 还没有大量触及,现在核心是在调度,去重已经做了,反爬的逻辑应该是属于爬虫本身来考虑的 |
63
Mileszhou 2020-04-07 16:42:56 +08:00
大佬可以的 抽空玩玩 Python
|
64
omri 2020-04-07 16:44:51 +08:00
这可能是《为什么从 Python 转 Go ?》这一问题的最强有力答案。支持!
|
66
yanwen 2020-04-07 17:38:33 +08:00
star+1
项目是好,不胜其扰。群已退。 |
67
AmberJiang 2020-04-07 18:11:28 +08:00
感谢大佬分享 好好学习一下✍
|
69
lyping 2020-04-07 19:18:41 +08:00
关注了,挺厉害的。就不知道能干点什么!
|
71
pyplayer 2020-04-07 20:23:30 +08:00
Star+1 闲下来好好看下
|
72
anUglyDog 2020-04-07 20:24:08 +08:00
强
|
73
graetdk 2020-04-07 21:56:31 +08:00
点赞,贡献了一个微不足道的 star,如果大佬有兴趣做商业化可以一起合作哇~
|
75
oopsays 2020-04-07 23:42:04 +08:00
个人觉得挑战可以改成就,然后增加个成就名称 hh
|
76
Leigg 2020-04-08 08:18:44 +08:00 via Android
stared
|
79
flashrick 2020-04-08 09:53:50 +08:00
满满都是干活啊,谢谢分享。但是微信群真不建议,有个业主群就够烦了,不想加任何别的超过 200 个人的群。QQ 群建议。
|
80
waruqi 2020-04-08 10:37:03 +08:00
厉害,我攒了 7 、8 年 也就攒了 2-3k 。。
|
81
CoolSpring 2020-04-08 10:48:51 +08:00
很有意思的项目,不过好奇既然能让用户执行任意的代码的话,怎么保证安全问题呢?(比如 getshell 之后删库)
|
84
tikazyq OP @CoolSpring 感谢支持。关于你的问题,由于一般是内部使用,所以安全问题主要靠自觉,而且如果把 crawlab 容器化之后,只能在容器里玩,还是有隔离的
|
85
jmyz0455 2020-04-08 15:05:42 +08:00
厉害厉害。
我也是前端,最近想学后端,看了楼主的经历,是不是选 Golang 入门好? 看到你一开始选用 Flask,能说说优点嚒。 |
86
lrh3321 2020-04-08 15:07:22 +08:00
厉害厉害。
|
87
angryfish 2020-04-08 15:23:41 +08:00
话说,楼主从这里赚到了钱没有?
|
88
HTSdTt3WygdgQQGe 2020-04-08 15:28:42 +08:00 via Android
先 star 再说,请问,docker 部署,服务器不稳定,爬虫任务会自动继续吗
|
89
oriyao 2020-04-08 17:10:34 +08:00
看起来非常赞
|
92
tikazyq OP @q409640976 这个功能有朋友提过,不过暂时还没有做,在 roadmap 上
|
94
djzhao 2020-04-08 23:01:59 +08:00
太强了,励志呀
|
95
lanseweike 2020-04-09 14:52:56 +08:00
支持,楼主付出了很多!我看很有前景
|
96
mianhk 2020-04-11 15:26:52 +08:00
已 star 支持。
|
97
mianhk 2020-04-11 15:27:04 +08:00
已 star,支持。
|
98
tsingke 2020-09-07 11:26:40 +08:00
学习了
|