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
複製程式碼
截圖
首頁
爬蟲列表
爬蟲詳情 - 概覽
任務詳情 - 抓取結果
架構
Crawlab的架構跟Celery非常相似,但是加入了包括前端、爬蟲、Flower在內的額外模組,以支援爬蟲管理的功能。
節點
節點其實就是Celery中的Worker。一個節點執行時會連線到一個任務佇列(例如Redis)來接收和執行任務。所有爬蟲需要在執行時被部署到節點上,使用者在部署前需要定義節點的IP地址和埠。
爬蟲
自動發現
在config.py
檔案中,修改變數PROJECT_SOURCE_FILE_FOLDER
作為爬蟲專案所在的目錄。Crawlab後臺程式會自動發現這些爬蟲專案並儲存到資料庫中。是不是很方便?
部署爬蟲
所有爬蟲需要在抓取前被部署當相應當節點中。在"爬蟲詳情"頁面點選"Deploy"按鈕,爬蟲將被部署到所有有效到節點中。
執行爬蟲
部署爬蟲之後,你可以在"爬蟲詳情"頁面點選"Run"按鈕來啟動爬蟲。一個爬蟲任務將被觸發,你可以在任務列表頁面中看到這個任務。
任務
任務被觸發並被節點執行。使用者可以在任務詳情頁面中看到任務到狀態、日誌和抓取結果。
後臺應用
這是一個Flask應用,提供了必要的API來支援常規操作,例如CRUD、爬蟲部署以及任務執行。每一個節點需要啟動Flask應用來支援爬蟲部署。執行python manage.py app
或python ./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開發交流群,加群請發申請