首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tikazyq
V2EX  ›  程序员

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

  tikazyq · 95 天前 · 9099 次点击
这是一个创建于 95 天前的主题,其中的信息可能已经有所发展或是发生改变。

前言

开发产品永远都是既痛苦,又开心的事情。一方面因为不了解用户真实需求、害怕闭门造车、担心技术无法实现而痛苦;另一方面,却会因为取得小小成就、获得用户认可、不断帮助用户解决问题而开心,从而继续坚持下去。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 主要解决的是大量爬虫管理困难的问题,例如需要监控上百个网站的参杂 scrapyselenium 的项目不容易做到同时管理,而且命令行管理的成本非常高,还容易出错。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,或者在底部留言提问,作者将尽力回答。谢谢!

参考

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

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

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

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

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

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


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

我也是前端,最近想学后端,看了楼主的经历,是不是选 Golang 入门好?
看到你一开始选用 Flask,能说说优点嚒。
lrh3321
    86
lrh3321   94 天前
厉害厉害。
angryfish
    87
angryfish   94 天前
话说,楼主从这里赚到了钱没有?
q409640976
    88
q409640976   94 天前 via Android
先 star 再说,请问,docker 部署,服务器不稳定,爬虫任务会自动继续吗
oriyao
    89
oriyao   94 天前
看起来非常赞
tikazyq
    90
tikazyq   94 天前
@jmyz0455 文中已经提到了 Golang 的优点,可以细看看
tikazyq
    91
tikazyq   94 天前
@angryfish 除了有群友发给我 5 元红包外,没有任何其他收入
tikazyq
    92
tikazyq   94 天前
@q409640976 这个功能有朋友提过,不过暂时还没有做,在 roadmap 上
tikazyq
    93
tikazyq   94 天前
@lrh3321
@oriyao 感谢支持
djzhao
    94
djzhao   94 天前
太强了,励志呀
lanseweike
    95
lanseweike   93 天前
支持,楼主付出了很多!我看很有前景
mianhk
    96
mianhk   91 天前
已 star 支持。
mianhk
    97
mianhk   91 天前
已 star,支持。
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   957 人在线   最高记录 5168   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 20:27 · PVG 04:27 · LAX 13:27 · JFK 16:27
♥ Do have faith in what you're doing.