分散式通用爬蟲管理平臺Crawlab

MarvinZhang發表於2019-03-06

Crawlab

基於Celery的爬蟲分散式爬蟲管理平臺,支援多種程式語言以及多種爬蟲框架.

Github: github.com/tikazyq/cra…

安裝

# 安裝後臺類庫
pip install -r ./crawlab/requirements.txt
複製程式碼
# 安裝前臺類庫
cd frontend
npm install
複製程式碼

配置

請更改配置檔案config.py,配置API和資料庫連線.

快速開始

# 執行所有服務
python manage.py run_all
複製程式碼
# 執行前端
cd frontend
npm run dev
複製程式碼

截圖

首頁

home

爬蟲列表

分散式通用爬蟲管理平臺Crawlab

爬蟲詳情 - 概覽

分散式通用爬蟲管理平臺Crawlab

任務詳情 - 抓取結果

分散式通用爬蟲管理平臺Crawlab

架構

Crawlab的架構跟Celery非常相似,但是加入了包括前端、爬蟲、Flower在內的額外模組,以支援爬蟲管理的功能。

分散式通用爬蟲管理平臺Crawlab

節點

節點其實就是Celery中的Worker。一個節點執行時會連線到一個任務佇列(例如Redis)來接收和執行任務。所有爬蟲需要在執行時被部署到節點上,使用者在部署前需要定義節點的IP地址和埠。

爬蟲

自動發現

config.py檔案中,修改變數PROJECT_SOURCE_FILE_FOLDER作為爬蟲專案所在的目錄。Crawlab後臺程式會自動發現這些爬蟲專案並儲存到資料庫中。是不是很方便?

部署爬蟲

所有爬蟲需要在抓取前被部署當相應當節點中。在"爬蟲詳情"頁面點選"Deploy"按鈕,爬蟲將被部署到所有有效到節點中。

執行爬蟲

部署爬蟲之後,你可以在"爬蟲詳情"頁面點選"Run"按鈕來啟動爬蟲。一個爬蟲任務將被觸發,你可以在任務列表頁面中看到這個任務。

任務

任務被觸發並被節點執行。使用者可以在任務詳情頁面中看到任務到狀態、日誌和抓取結果。

後臺應用

這是一個Flask應用,提供了必要的API來支援常規操作,例如CRUD、爬蟲部署以及任務執行。每一個節點需要啟動Flask應用來支援爬蟲部署。執行python manage.py apppython ./bin/run_app.py來啟動應用。

中間者

中間者跟Celery中定義的一樣,作為執行非同步任務的佇列。

前端

前端其實就是一個基於Vue-Element-Admin的單頁應用。其中重用了很多Element-UI的控制元件來支援相應的展示。

資料關聯

任務是利用python的subprocess模組中的Popen來實現的。任務ID將以環境變數CRAWLAB_TASK_ID的形式存在於爬蟲任務執行的程式中,並以此來關聯抓取資料。

在你的爬蟲程式中,你需要將CRAWLAB_TASK_ID的值以task_id作為可以存入資料庫中。這樣Crawlab就直到如何將爬蟲任務與抓取資料關聯起來了。當前,Crawlab只支援MongoDB。

import os
from pymongo import MongoClient

MONGO_HOST = '192.168.99.100'
MONGO_PORT = 27017
MONGO_DB = 'crawlab_test'

# scrapy example in the pipeline
class JuejinPipeline(object):
    mongo = MongoClient(host=MONGO_HOST, port=MONGO_PORT)
    db = mongo[MONGO_DB]
    col_name = os.environ.get('CRAWLAB_COLLECTION')
    if not col_name:
        col_name = 'test'
    col = db[col_name]

    def process_item(self, item, spider):
        item['task_id'] = os.environ.get('CRAWLAB_TASK_ID')
        self.col.save(item)
        return item
複製程式碼

與其他框架比較

限制以及有一些爬蟲管理框架了,因此為啥還要用Crawlab?

因為很多現有當平臺都依賴於Scrapyd,限制了爬蟲的程式語言以及框架,爬蟲工程師只能用scrapy和python。當然,scrapy是非常優秀的爬蟲框架,但是它不能做一切事情。

Crawlab使用起來很方便,也很通用,可以適用於幾乎任何主流語言和框架。它還有一個精美的前端介面,讓使用者可以方便的管理和執行爬蟲。

框架 型別 分散式 前端 依賴於Scrapyd
Crawlab 管理平臺 Y Y N
Gerapy 管理平臺 Y Y Y
SpiderKeeper 管理平臺 Y Y Y
ScrapydWeb 管理平臺 Y Y Y
Scrapyd 網路服務 Y N N/A

TODOs

後端
  • 檔案管理
  • MySQL資料庫支援
  • 重跑任務
  • 節點監控
  • 更多爬蟲例子
前端
  • 任務資料統計
  • 表格過濾
  • 多語言支援 (中文)
  • 登入和使用者管理
  • 全域性搜尋

歡迎大家來加入Crawlab開發交流群,加群請發申請

分散式通用爬蟲管理平臺Crawlab

相關文章