爬蟲管理平臺Crawlab v0.4.3發佈(界面上點幾下就可安裝pip或npm依賴)

前言

Crawlab 是一款受人歡迎的分佈式通用爬蟲管理平臺,由 Crawlab 開發組 開發和維護。自去年 3 月份上線以來,Crawlab 由於極其強大的靈活性、簡單精美的操做界面以及健壯而穩定穩定的功能表現,不斷受到爬蟲工程師和開發者的喜好和好評,現在已經有了近 4k Github 標星和超過 8k Docker 下載。在最近的一次調研中,超過三分之一的參與調查者都表示已經將 Crawlab 應用於了生產環境。前端

Crawlab 還不瞭解的同窗,能夠參考如下相關文章或文檔:node

通過 8 個月的迭代和優化,Crawlab 已經變得更加穩定和易用,不過隨之而來的也是用戶的建議和反饋,其中一個比較大的痛點是爬蟲的依賴安裝。簡單來講,因爲 Crawlab 主要是由 Docker 來安裝,基礎鏡像只有 Python 的一些與爬蟲和 Crawlab 相關的庫,若是須要安裝一些爬蟲必要的依賴,例如數據庫操做庫 pymysql 等等,就必須作一些 hack,例如上傳一個安裝依賴的特殊爬蟲,或者以 Crawlab 鏡像爲基礎,構建出包含須要的依賴的鏡像。這兩種方式,既不安全,也不方便和直觀。mysql

所以,在最新的版本 v0.4.3 中,咱們發佈了更方便的在界面上安裝依賴的功能。下面咱們介紹一下這個功能。git

依賴安裝

依賴安裝是常用 Crawlab 常常須要的需求,目前的臨時解決方案都是經過 hacking 的方式。而如今,咱們的最新版本已經有比較成熟的解決方案,也就是在界面上操做安裝依賴。在進入細節以前,咱們先了解下通常爬蟲工程師的主選編程語言。github

哪一個語言最受歡迎?

在開發依賴安裝功能之前,咱們首先須要肯定哪(幾)種語言是爬蟲界中比較受歡迎的。咱們猜想 Python 是主要的爬蟲工程師用的語言,這是由於大紅大紫的成熟的 Scrapy 爬蟲框架以及 Python 的簡單語法和豐富的生態。因而,咱們作了一個小小的調查,調查問題爲「您主要用什麼語言編寫爬蟲?(多選)」。如下是調查結果。redis

語言 佔比
Python 55.8%
Golang 12.9%
Node.js 11.7%
Java 11.0%
PHP 3.1%
C/C++ 1.8%
C# 1.2%
Shell 1.2%
其餘 1.2%

能夠看到,Python 是爬蟲界的絕對霸主,超過一半的人選擇用 Python 做爲主要的爬蟲編程語言。動態語言 Node.js 和靜態語言 Golang、Java 各自勢均力敵。這讓我有些詫異,由於 Node.js 有爬蟲神器 Puppeteer 來抓取動態內容,並且也編寫也比靜態語言 Golang 和 Java 更方便。這樣的結果多是由於,爬蟲工程師有很多由後端工程師兼職,所以採用了比較熟悉的後端靜態語言。sql

所以,Python 是咱們此次更新絕對會支持的語言(這裏的「支持」不表明其餘語言不能運行,只是須要另外安裝依賴)。其次,咱們選擇了 Node.js 做爲第二個支持安裝依賴的語言,由於它的靈活性一樣很高。對其餘語言例如 Golang 和 Java 這樣的靜態語言的依賴安裝支持,咱們將放到後面的版本再開發。docker

如何使用依賴安裝

下面咱們將介紹如何在 Crawlab 界面上使用依賴安裝。數據庫

首先咱們須要導航到節點列表頁,點擊一個節點的藍色查看按鈕(以下圖),進入節點詳情頁。npm

進入節點詳情頁以後,點擊「安裝」標籤,進入依賴安裝頁面。若是在搜索欄中搜索相關的依賴庫,將獲得相近的依賴列表。例如,Python 中能夠獲得 pip 的相關依賴。點擊「安裝」開始 pip install <package_name>,並稍等片刻,就會收到安裝成功(或失敗)的提示信息;若是該依賴已經在該節點上存在,則會顯示「卸載」按鈕,點擊則能夠開始卸載該依賴,至關於 pip uninstall <package_name>。固然,其餘語言對應其所對應的包管理操做,例如 Node.js 對應 npm。

點擊「查看已安裝」,能夠看到該節點上已安裝的依賴以及其對應的版本,以下圖。一樣,點擊「卸載」能夠卸載該依賴。

因爲 Python 是 Docker 鏡像上預裝的(待會兒會介紹如何在 Docker 上預裝 Node.js)。點擊 「Node.js」 標籤,會看到提示說「Node.js 尚未安裝,您是否打算安裝它?」。點擊「安裝」按鈕,後臺會開始安裝 nvm 和 Node.js 8.12 版本。而後就會看到跟 Python 同樣的界面了。

Docker 中預裝編程語言

爲了方便爬蟲開發者在 Docker 中的 Node.js 爬蟲應用,咱們開發了在 Docker 中配置預裝 Node.js 的功能。只須要在啓動的時候設置環境變量 CRAWLAB_SERVER_LANG_NODEY,而後啓動鏡像就能夠了。例如以下 docker-compose.yml

version: '3.3'
services:
  master: 
    image: tikazyq/crawlab:latest
    container_name: master
    environment:
      CRAWLAB_API_ADDRESS: "http://localhost:8000"  # backend API address 後端 API 地址,設置爲 http://<宿主機IP>:<端口>,端口爲映射出來的端口
      CRAWLAB_SERVER_MASTER: "Y"  # whether to be master node 是否爲主節點,主節點爲 Y,工做節點爲 N
      CRAWLAB_MONGO_HOST: "mongo"  # MongoDB host address MongoDB 的地址,在 docker compose 網絡中,直接引用服務名稱
      CRAWLAB_REDIS_ADDRESS: "redis"  # Redis host address Redis 的地址,在 docker compose 網絡中,直接引用服務名稱
      CRAWLAB_SERVER_LANG_NODE: "Y"  # 預安裝 Node.js 語言環境
    ports:    
      - "8080:8080" # frontend port mapping 前端端口映射
      - "8000:8000" # backend port mapping 後端端口映射 
    depends_on:
      - mongo
      - redis
  worker:
    image: tikazyq/crawlab:latest
    container_name: worker
    environment:
      CRAWLAB_SERVER_MASTER: "N"
      CRAWLAB_MONGO_HOST: "mongo"
      CRAWLAB_REDIS_ADDRESS: "redis"
      CRAWLAB_SERVER_LANG_NODE: "Y"  # 預安裝 Node.js 語言環境
    depends_on:
      - mongo
      - redis
  mongo:
    image: mongo:latest
    restart: always
    # volumes:
    #   - "/opt/crawlab/mongo/data/db:/data/db"  # make data persistent 持久化
    # ports:
    #   - "27017:27017"  # expose port to host machine 暴露接口到宿主機
  redis:
    image: redis:latest
    restart: always
    # volumes:
    #   - "/opt/crawlab/redis/data:/data"  # make data persistent 持久化
    # ports:
    #   - "6379:6379"  # expose port to host machine 暴露接口到宿主機

不足的地方

我知道開發者們會吐槽:爲什麼不作上傳 requirements.txtpackage.json 批量安裝的功能啊;爲什麼不支持環境持久化,每次都要從新安裝啊;爲什麼不支持 Java 啊... 我知道這些都是很實用的功能,但 Crawlab 的開發向來都是聽從敏捷開發和精益打磨的原則,不會過分開發一個功能,優先保證可行性、可用性、健壯性和穩定性。所以,在驗證了你們的使用狀況後,咱們會逐步完善這個功能,讓其變得更加實用。

更新內容

如下是本次版本 v0.4.3 的更新詳情。

功能 / 優化

  • 依賴安裝. 容許用戶在平臺 Web 界面安裝/卸載依賴以及添加編程語言(暫時只有 Node.js)。
  • Docker 中預裝編程語言. 容許 Docker 用戶經過設置 CRAWLAB_SERVER_LANG_NODEY 來預裝 Node.js 環境.
  • 在爬蟲詳情頁添加定時任務列表. 容許用戶在爬蟲詳情頁查看、添加、編輯定時任務. #360
  • Cron 表達式與 Linux 一致. 將表達式從 6 元素改成 5 元素,與 Linux 一致.
  • 啓用/禁用定時任務. 容許用戶啓用/禁用定時任務. #297
  • 優化任務管理. 容許用戶批量刪除任務. #341
  • 優化爬蟲管理. 容許用戶在爬蟲列表頁對爬蟲進行篩選和排序.
  • 添加中文版 CHANGELOG.
  • 在頂部添加 Github 加星按鈕.

Bug 修復

  • 定時任務問題. #423
  • 上傳爬蟲zip文件問題. #403 #407
  • 由於網絡緣由致使崩潰. #340

產品規劃

Crawlab 能發展到如今,離不開合理的產品規劃。所以,在收集用戶反饋的同時,咱們也整理了比較重要的(至少咱們認爲比較重要的)功能,將它們安排在各個發版上。具體發版日期咱們沒法肯定,但能夠確定的是,Crawlab 開發組 會逐步迭代產品,將產品打造得更加實用和便捷。

社區

若是您以爲 Crawlab 對您的平常開發或公司有幫助,請加做者微信 tikazyq1 並註明 "Crawlab",做者會將你拉入羣。歡迎在 Github 上進行 star,以及,若是遇到任何問題,請隨時在 Github 上提 issue。另外,歡迎您對 Crawlab 作開發貢獻。

相關文章
相關標籤/搜索