基於Celery的爬蟲分佈式爬蟲管理平臺,支持多種編程語言以及多種爬蟲框架.前端
Github: github.com/tikazyq/cra…vue
# 安裝後臺類庫
pip install -r ./crawlab/requirements.txt
複製代碼
# 安裝前臺類庫
cd frontend
npm install
複製代碼
請更改配置文件config.py
,配置API和數據庫鏈接.python
# 運行全部服務
python manage.py run_all
複製代碼
# 運行前端
cd frontend
npm run dev
複製代碼
Crawlab的架構跟Celery很是類似,可是加入了包括前端、爬蟲、Flower在內的額外模塊,以支持爬蟲管理的功能。git
節點其實就是Celery中的Worker。一個節點運行時會鏈接到一個任務隊列(例如Redis)來接收和運行任務。全部爬蟲須要在運行時被部署到節點上,用戶在部署前須要定義節點的IP地址和端口。github
在config.py
文件中,修改變量PROJECT_SOURCE_FILE_FOLDER
做爲爬蟲項目所在的目錄。Crawlab後臺程序會自動發現這些爬蟲項目並儲存到數據庫中。是否是很方便?web
全部爬蟲須要在抓取前被部署當相應當節點中。在"爬蟲詳情"頁面點擊"Deploy"按鈕,爬蟲將被部署到全部有效到節點中。數據庫
部署爬蟲以後,你能夠在"爬蟲詳情"頁面點擊"Run"按鈕來啓動爬蟲。一個爬蟲任務將被觸發,你能夠在任務列表頁面中看到這個任務。npm
任務被觸發並被節點執行。用戶能夠在任務詳情頁面中看到任務到狀態、日誌和抓取結果。編程
這是一個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 |
歡迎你們來加入Crawlab開發交流羣,加羣請發申請