前言
開發產品永遠都是既痛苦,又開心的事情。一方面因為不瞭解使用者真實需求、害怕閉門造車、擔心技術無法實現而痛苦;另一方面,卻會因為取得小小成就、獲得使用者認可、不斷幫助使用者解決問題而開心,從而繼續堅持下去。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,或者在底部留言提問,作者將盡力回答。謝謝!