• 请不要在回答技术问题时复制粘贴 AI 生成的内容
tikazyq
V2EX  ›  程序员

收获人生第一个 5k Star 开源项目,经验教训分享给大家

  tikazyq ·
tikazyq · Apr 7, 2020 · 14034 views
This topic created in 2401 days ago, the information mentioned may be changed or developed.

前言

开发产品永远都是既痛苦,又开心的事情。一方面因为不了解用户真实需求、害怕闭门造车、担心技术无法实现而痛苦;另一方面,却会因为取得小小成就、获得用户认可、不断帮助用户解决问题而开心,从而继续坚持下去。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 的分布式爬虫管理平台,支持多种编程语言以及多种爬虫框架。对爬虫管理平台不了解的同学,可以参考这篇文章,《如何快速搭建实用的爬虫管理平台》,里面有对爬虫管理平台详细的介绍。

查看演示 Demo

项目自 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,或者在底部留言提问,作者将尽力回答。谢谢!

参考

98 replies  •  2020-09-07 11:26:40 +08:00
necodba
necodba
Apr 7, 2020
1
竟然遇到了野生的大佬。已经关注项目已久了
tikazyq
tikazyq
OP
Apr 7, 2020
2
@necodba 感谢支持,现在还没有试用过么?
Showfom
Showfom
PRO
Apr 7, 2020
3
支持一下大佬
tikazyq
tikazyq
OP
Apr 7, 2020
4
@Showfom 感谢支持
zhw2590582
zhw2590582
Apr 7, 2020 via iPhone
5
支持一下
pomelotea2009
pomelotea2009
Apr 7, 2020 via Android
6
支持,楼主付出了很多!
008px
008px
Apr 7, 2020 via Android
7
赞一个
smallpython
smallpython
Apr 7, 2020
8
做一个这样的项目是不是前端的工作量最多
tikazyq
tikazyq
OP
Apr 7, 2020
9
@smallpython 作为一个前端工程师来说,前端工程量并不大,相对来说后端的复杂度更大一些
jatesun
jatesun
Apr 7, 2020
10
佩服楼主,拜读一下
jiezhi
jiezhi
Apr 7, 2020
11
Star+1
tikazyq
tikazyq
OP
Apr 7, 2020
12
@jiezhi 感谢 star
tikazyq
tikazyq
OP
Apr 7, 2020
13
@jatesun 感谢支持
cxshun
cxshun
Apr 7, 2020
14
Star+1,楼主牛啤
jackom
jackom
Apr 7, 2020 via iPhone
15
支持大佬
tikazyq
tikazyq
OP
Apr 7, 2020
16
@cxshun 感谢🙏
luzihang
luzihang
Apr 7, 2020
17
持续赞贴
tikazyq
tikazyq
OP
Apr 7, 2020
18
@luzihang 哈哈,大佬也在 v2
gogo88
gogo88
Apr 7, 2020 via iPhone
19
膜拜大佬
tcfenix
tcfenix
Apr 7, 2020
20
给一个建议,demo 界面建议直接把 admin admin 默认放在输入框里面
底下一行字比较小,容易被忽略
tcfenix
tcfenix
Apr 7, 2020
21
管理后台整体的完成度很高,楼主你很厉害,加油!
tikazyq
tikazyq
OP
Apr 7, 2020
22
@tcfenix 是的,demo 的 login 界面稍微有些不友好,感谢大佬的意见和支持
fcmio
fcmio
Apr 7, 2020 via iPhone
23
好东西👍楼主大佬
tikazyq
tikazyq
OP
Apr 7, 2020
24
@ShuoHui 感谢支持
cndydb
cndydb
Apr 7, 2020
25
这后台模板牛
tikazyq
tikazyq
OP
Apr 7, 2020
26
@cndydb 这是 PanJiaChen 大佬的 vue-element-admin 模版

https://github.com/PanJiaChen/vue-element-admin
wangchengwu
wangchengwu
Apr 7, 2020
27
膜拜大佬! 666666
ddzzhen
ddzzhen
Apr 7, 2020 via Android
28
点赞+恭喜,不断改进的产品就是好产品!
leowy
leowy
Apr 7, 2020
29
star 了学习学习
ignore
ignore
Apr 7, 2020
30
终于不是 markdown
tikazyq
tikazyq
OP
Apr 7, 2020
31
@wangchengwu
@ddzzhen
@leowy 感谢支持
tikazyq
tikazyq
OP
Apr 7, 2020
32
@ignore 我也不是很倾向于提倡 markdown 项目,但是现在技术发展太快,程序员都有知识焦虑的情况
DelayNoMay
DelayNoMay
Apr 7, 2020
33
收藏了,然后准备学(chi)习(hui)
ArJun
ArJun
Apr 7, 2020
34
佩服大佬,还是用 go 写的
hahajing2019
hahajing2019
Apr 7, 2020
35
去年 8 月就关注这个项目了,是我看的第一个 golang 开源项目,强烈支持
encro
encro
Apr 7, 2020
36
想问下,有盈利了吗?
encro
encro
Apr 7, 2020
37
很有产品思维,不错。
tikazyq
tikazyq
OP
Apr 7, 2020
38
@DelayNoMay 源码质量还是很高的,适合学习
tikazyq
tikazyq
OP
Apr 7, 2020
39
@ArJun golang 现在很香啊
@hahajing2019 感谢支持
tikazyq
tikazyq
OP
Apr 7, 2020
40
@encro 现在还存在很多问题,短期之内还不会考虑盈利
aladdindingding
aladdindingding
Apr 7, 2020
41
想问一下 一个 master 最多可以管理多少个 node 节点呢 是怎么下发命令让 node 节点运行的
lohiecan
lohiecan
Apr 7, 2020 via Android
42
厉害了
tikazyq
tikazyq
OP
Apr 7, 2020
43
@aladdindingding 还没有测试过 master 管理 worker 节点的极限(因为没有这么多资源。。。),用户目前来看管理 10 个节点是没任何问题的

节点之间的交互是通过 redis 来完成,主要技术用了消息队列、pubsub 以及延迟队列
stille
stille
Apr 7, 2020
44
收藏了...感觉日后肯定用得着.
tikazyq
tikazyq
OP
Apr 7, 2020
45
@stille 感谢支持
hackk
hackk
Apr 7, 2020
46
star 了一个,支持!
tikazyq
tikazyq
OP
Apr 7, 2020
47
@hackk 感谢
longgediyi999
longgediyi999
Apr 7, 2020
48
厉害厉害 很好看
jayrome
jayrome
Apr 7, 2020
49
支持+马克
ice2neet
ice2neet
Apr 7, 2020
50
支持一下
Fizzyi
Fizzyi
Apr 7, 2020
51
支持,已经在公司开始用起来了
tikazyq
tikazyq
OP
Apr 7, 2020
52
tikazyq
tikazyq
OP
Apr 7, 2020
53
@Fizzyi 非常感谢在公司使用,可以加微信群反馈任何问题哈,加 tikazyq1 拉群
purensong
purensong
Apr 7, 2020
54
做的很用心,不过我是第一次接触,佩服大佬。提个问题,demo 地址打开后我下载了一个文件(原来爬好的)下载出来是 csv,打开中文是乱码, 预览的表格数据还是中文。https://crawlab.cn/demo#/tasks/5cb2fd44-88c6-4f21-9d88-85f3cf5c4930
shenkai600
shenkai600
Apr 7, 2020
55
星你项目的时候还只有 1500 个星呢。。 很不错哟
Mohanson
Mohanson
Apr 7, 2020 via Android
56
支持一下
Fizzyi
Fizzyi
Apr 7, 2020
57
@tikazyq 哈哈 已经加了大佬也入群了
tikazyq
tikazyq
OP
Apr 7, 2020
58
@Fizzyi 🤝
tikazyq
tikazyq
OP
Apr 7, 2020
59
@purensong 可能是编码没有处理好,这可能是个 bug,有空可以帮忙提个 issue 哈,多谢多谢
tikazyq
tikazyq
OP
Apr 7, 2020
60
@shenkai600 多谢加🌟
laminux29
laminux29
Apr 7, 2020
61
1.这类东西其实根本不需要在意前端,前端直接输出为 excel 就行了。

2.这种东西的技术难度在后端,后端的核心技术难度在于,如何反爬,以及如何高性能地对 url 去重。
tikazyq
tikazyq
OP
Apr 7, 2020
62
@laminux29

1. 对于第一个问题我持保留意见,因为可视化是个很强大的特性,不能忽视

2. 对于爬虫程序本身来说,crawlab 的 project scope 还没有大量触及,现在核心是在调度,去重已经做了,反爬的逻辑应该是属于爬虫本身来考虑的
Mileszhou
Mileszhou
Apr 7, 2020
63
大佬可以的 抽空玩玩 Python
omri
omri
Apr 7, 2020
64
这可能是《为什么从 Python 转 Go ?》这一问题的最强有力答案。支持!
tikazyq
tikazyq
OP
Apr 7, 2020
65
@omri 哈哈,确实,golang 克服了很多 python 的不足,作为比较容易上手的静态类型语言,是首选
yanwen
yanwen
Apr 7, 2020
66
star+1


项目是好,不胜其扰。群已退。
AmberJiang
AmberJiang
Apr 7, 2020
67
感谢大佬分享 好好学习一下✍
tikazyq
tikazyq
OP
Apr 7, 2020 via iPhone
68
@yanwen 可以开静音😅
lyping
lyping
Apr 7, 2020
69
关注了,挺厉害的。就不知道能干点什么!
tikazyq
tikazyq
OP
Apr 7, 2020 via iPhone
70
@lyping 管理爬虫用的,爬虫管理平台可以百度一下
pyplayer
pyplayer
Apr 7, 2020
71
Star+1 闲下来好好看下
anUglyDog
anUglyDog
Apr 7, 2020
72
强
graetdk
graetdk
Apr 7, 2020
73
点赞,贡献了一个微不足道的 star,如果大佬有兴趣做商业化可以一起合作哇~
tikazyq
tikazyq
OP
Apr 7, 2020
74
@graetdk 可以加我微信细聊 tikazyq1
oopsays
oopsays
Apr 7, 2020
75
个人觉得挑战可以改成就,然后增加个成就名称 hh
Leigg
Leigg
Apr 8, 2020 via Android
76
stared
tikazyq
tikazyq
OP
Apr 8, 2020
77
@oopsays 好主意👍
tikazyq
tikazyq
OP
Apr 8, 2020
78
@Leigg 感谢
flashrick
flashrick
Apr 8, 2020
79
满满都是干活啊,谢谢分享。但是微信群真不建议,有个业主群就够烦了,不想加任何别的超过 200 个人的群。QQ 群建议。
waruqi
waruqi
Apr 8, 2020
80
厉害,我攒了 7 、8 年 也就攒了 2-3k 。。
CoolSpring
CoolSpring
Apr 8, 2020
81
很有意思的项目,不过好奇既然能让用户执行任意的代码的话,怎么保证安全问题呢?(比如 getshell 之后删库)
tikazyq
tikazyq
OP
Apr 8, 2020
82
@flashrick 微信群主要是考虑到国内的用户,我们有个 tg 群,但没有推广
tikazyq
tikazyq
OP
Apr 8, 2020
83
@waruqi star 数不一定准确的,要看实际使用的人数
tikazyq
tikazyq
OP
Apr 8, 2020
84
@CoolSpring 感谢支持。关于你的问题,由于一般是内部使用,所以安全问题主要靠自觉,而且如果把 crawlab 容器化之后,只能在容器里玩,还是有隔离的
jmyz0455
jmyz0455
Apr 8, 2020
85
厉害厉害。

我也是前端,最近想学后端,看了楼主的经历,是不是选 Golang 入门好?
看到你一开始选用 Flask,能说说优点嚒。
lrh3321
lrh3321
Apr 8, 2020
86
厉害厉害。
GBdG6clg2Jy17ua5
GBdG6clg2Jy17ua5
Apr 8, 2020
87
话说,楼主从这里赚到了钱没有?
HTSdTt3WygdgQQGe
HTSdTt3WygdgQQGe
Apr 8, 2020 via Android
88
先 star 再说,请问,docker 部署,服务器不稳定,爬虫任务会自动继续吗
oriyao
oriyao
Apr 8, 2020
89
看起来非常赞
tikazyq
tikazyq
OP
Apr 8, 2020
90
@jmyz0455 文中已经提到了 Golang 的优点,可以细看看
tikazyq
tikazyq
OP
Apr 8, 2020
91
@angryfish 除了有群友发给我 5 元红包外,没有任何其他收入
tikazyq
tikazyq
OP
Apr 8, 2020
92
@q409640976 这个功能有朋友提过,不过暂时还没有做,在 roadmap 上
tikazyq
tikazyq
OP
Apr 8, 2020
93
@lrh3321
@oriyao 感谢支持
djzhao
djzhao
Apr 8, 2020
94
太强了,励志呀
lanseweike
lanseweike
Apr 9, 2020
95
支持,楼主付出了很多!我看很有前景
mianhk
mianhk
Apr 11, 2020
96
已 star 支持。
mianhk
mianhk
Apr 11, 2020
97
已 star,支持。
tsingke
tsingke
Sep 7, 2020
98
学习了
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1317 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 124ms · UTC 21:47 · PVG 05:47 · LAX 13:47 · JFK 16:47
♥ Do have faith in what you're doing.