<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Crawlab分布式爬蟲管理平臺

          聯(lián)合創(chuàng)作 · 2023-09-29 13:47

          Crawlab 是一個(gè)使用 Golang 開發(fā)的分布式爬蟲管理平臺,支持Python、NodeJS、Go、Java、PHP等多種編程語言以及多種爬蟲框架。

          安裝

          三種方式:

          1. Docker(推薦)
          2. 直接部署(了解內(nèi)核)

          要求(Docker)

          • Docker 18.03+
          • Redis
          • MongoDB 3.6+

          要求(直接部署)

          • Go 1.12+
          • Node 8.12+
          • Redis
          • MongoDB 3.6+

          運(yùn)行

          Docker

          運(yùn)行主節(jié)點(diǎn)示例。192.168.99.1是在Docker Machine網(wǎng)絡(luò)中的宿主機(jī)IP地址。192.168.99.100是Docker主節(jié)點(diǎn)的IP地址。

          docker run -d --rm --name crawlab \
                  -e CRAWLAB_REDIS_ADDRESS=192.168.99.1 \
                  -e CRAWLAB_MONGO_HOST=192.168.99.1 \
                  -e CRAWLAB_SERVER_MASTER=Y \
                  -e CRAWLAB_API_ADDRESS=192.168.99.100:8000 \
                  -e CRAWLAB_SPIDER_PATH=/app/spiders \
                  -p 8080:8080 \
                  -p 8000:8000 \
                  -v /var/logs/crawlab:/var/logs/crawlab \
                  tikazyq/crawlab:0.3.0

          當(dāng)然也可以用docker-compose來一鍵啟動(dòng),甚至不用配置MongoDB和Redis數(shù)據(jù)庫,當(dāng)然我們推薦這樣做。在當(dāng)前目錄中創(chuàng)建docker-compose.yml文件,輸入以下內(nèi)容。

          version: '3.3'
          services:
            master: 
              image: tikazyq/crawlab:latest
              container_name: master
              environment:
                CRAWLAB_API_ADDRESS: "localhost:8000"
                CRAWLAB_SERVER_MASTER: "Y"
                CRAWLAB_MONGO_HOST: "mongo"
                CRAWLAB_REDIS_ADDRESS: "redis"
              ports:    
                - "8080:8080" # frontend
                - "8000:8000" # backend
              depends_on:
                - mongo
                - redis
            mongo:
              image: mongo:latest
              restart: always
              ports:
                - "27017:27017"
            redis:
              image: redis:latest
              restart: always
              ports:
                - "6379:6379"

          然后執(zhí)行以下命令,Crawlab主節(jié)點(diǎn)+MongoDB+Redis就啟動(dòng)了。打開http://localhost:8080就能看到界面。

          docker-compose up

          Docker部署的詳情,請見相關(guān)文檔

          直接部署

          請參考相關(guān)文檔。

          截圖

          登錄

          首頁

          節(jié)點(diǎn)列表

          節(jié)點(diǎn)拓?fù)鋱D

          爬蟲列表

          爬蟲概覽

          爬蟲分析

          爬蟲文件

          任務(wù)詳情 - 抓取結(jié)果

          定時(shí)任務(wù)

          架構(gòu)

          Crawlab的架構(gòu)包括了一個(gè)主節(jié)點(diǎn)(Master Node)和多個(gè)工作節(jié)點(diǎn)(Worker Node),以及負(fù)責(zé)通信和數(shù)據(jù)儲(chǔ)存的Redis和MongoDB數(shù)據(jù)庫。

          前端應(yīng)用向主節(jié)點(diǎn)請求數(shù)據(jù),主節(jié)點(diǎn)通過MongoDB和Redis來執(zhí)行任務(wù)派發(fā)調(diào)度以及部署,工作節(jié)點(diǎn)收到任務(wù)之后,開始執(zhí)行爬蟲任務(wù),并將任務(wù)結(jié)果儲(chǔ)存到MongoDB。架構(gòu)相對于v0.3.0之前的Celery版本有所精簡,去除了不必要的節(jié)點(diǎn)監(jiān)控模塊Flower,節(jié)點(diǎn)監(jiān)控主要由Redis完成。

          主節(jié)點(diǎn)

          主節(jié)點(diǎn)是整個(gè)Crawlab架構(gòu)的核心,屬于Crawlab的中控系統(tǒng)。

          主節(jié)點(diǎn)主要負(fù)責(zé)以下功能:

          1. 爬蟲任務(wù)調(diào)度
          2. 工作節(jié)點(diǎn)管理和通信
          3. 爬蟲部署
          4. 前端以及API服務(wù)
          5. 執(zhí)行任務(wù)(可以將主節(jié)點(diǎn)當(dāng)成工作節(jié)點(diǎn))

          主節(jié)點(diǎn)負(fù)責(zé)與前端應(yīng)用進(jìn)行通信,并通過Redis將爬蟲任務(wù)派發(fā)給工作節(jié)點(diǎn)。同時(shí),主節(jié)點(diǎn)會(huì)同步(部署)爬蟲給工作節(jié)點(diǎn),通過Redis和MongoDB的GridFS。

          工作節(jié)點(diǎn)

          工作節(jié)點(diǎn)的主要功能是執(zhí)行爬蟲任務(wù)和儲(chǔ)存抓取數(shù)據(jù)與日志,并且通過Redis的PubSub跟主節(jié)點(diǎn)通信。通過增加工作節(jié)點(diǎn)數(shù)量,Crawlab可以做到橫向擴(kuò)展,不同的爬蟲任務(wù)可以分配到不同的節(jié)點(diǎn)上執(zhí)行。

          MongoDB

          MongoDB是Crawlab的運(yùn)行數(shù)據(jù)庫,儲(chǔ)存有節(jié)點(diǎn)、爬蟲、任務(wù)、定時(shí)任務(wù)等數(shù)據(jù),另外GridFS文件儲(chǔ)存方式是主節(jié)點(diǎn)儲(chǔ)存爬蟲文件并同步到工作節(jié)點(diǎn)的中間媒介。

          Redis

          Redis是非常受歡迎的Key-Value數(shù)據(jù)庫,在Crawlab中主要實(shí)現(xiàn)節(jié)點(diǎn)間數(shù)據(jù)通信的功能。例如,節(jié)點(diǎn)會(huì)將自己信息通過HSET儲(chǔ)存在Redis的nodes哈希列表中,主節(jié)點(diǎn)根據(jù)哈希列表來判斷在線節(jié)點(diǎn)。

          前端

          前端是一個(gè)基于Vue-Element-Admin的單頁應(yīng)用。其中重用了很多Element-UI的控件來支持相應(yīng)的展示。

          與其他框架的集成

          爬蟲任務(wù)本質(zhì)上是由一個(gè)shell命令來實(shí)現(xiàn)的。任務(wù)ID將以環(huán)境變量CRAWLAB_TASK_ID的形式存在于爬蟲任務(wù)運(yùn)行的進(jìn)程中,并以此來關(guān)聯(lián)抓取數(shù)據(jù)。另外,CRAWLAB_COLLECTION是Crawlab傳過來的所存放collection的名稱。

          在爬蟲程序中,需要將CRAWLAB_TASK_ID的值以task_id作為可以存入數(shù)據(jù)庫中CRAWLAB_COLLECTION的collection中。這樣Crawlab就知道如何將爬蟲任務(wù)與抓取數(shù)據(jù)關(guān)聯(lián)起來了。當(dāng)前,Crawlab只支持MongoDB。

          集成Scrapy

          以下是Crawlab跟Scrapy集成的例子,利用了Crawlab傳過來的task_id和collection_name。

          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

          與其他框架比較

          現(xiàn)在已經(jīng)有一些爬蟲管理框架了,因此為啥還要用Crawlab?

          因?yàn)楹芏喱F(xiàn)有當(dāng)平臺都依賴于Scrapyd,限制了爬蟲的編程語言以及框架,爬蟲工程師只能用scrapy和python。當(dāng)然,scrapy是非常優(yōu)秀的爬蟲框架,但是它不能做一切事情。

          Crawlab使用起來很方便,也很通用,可以適用于幾乎任何主流語言和框架。它還有一個(gè)精美的前端界面,讓用戶可以方便的管理和運(yùn)行爬蟲。

          框架 類型 分布式 前端 依賴于Scrapyd
          Crawlab 管理平臺 Y Y N
          ScrapydWeb 管理平臺 Y Y Y
          SpiderKeeper 管理平臺 Y Y Y
          Gerapy 管理平臺 Y Y Y
          Scrapyd 網(wǎng)絡(luò)服務(wù) Y N N/A

          Q&A

          1. 為何我訪問 http://localhost:8080 提示訪問不了?

          假如您是Docker部署的,請檢查一下您是否用了Docker Machine,這樣的話您需要輸入地址 http://192.168.99.100:8080才行。

          另外,請確保您用了-p 8080:8080來映射端口,并檢查宿主機(jī)是否開放了8080端口。

          2. 我可以看到登錄頁面了,但為何我點(diǎn)擊登陸的時(shí)候按鈕一直轉(zhuǎn)圈圈?

          絕大多數(shù)情況下,您可能是沒有正確配置CRAWLAB_API_ADDRESS這個(gè)環(huán)境變量。這個(gè)變量是告訴前端應(yīng)該通過哪個(gè)地址來請求API數(shù)據(jù)的,因此需要將它設(shè)置為宿主機(jī)的IP地址+端口,例如 192.168.0.1:8000。接著,重啟容器,在瀏覽器中輸入宿主機(jī)IP+端口,就可以順利登陸了。

          請注意,8080是前端端口,8000是后端端口,您在瀏覽器中只需要輸入前端的地址就可以了,要注意區(qū)分。

          3. 在爬蟲頁面有一些不認(rèn)識的爬蟲列表,這些是什么呢?

          這些是demo爬蟲,如果需要添加您自己的爬蟲,請將您的爬蟲文件打包成zip文件,再在爬蟲頁面中點(diǎn)擊添加爬蟲上傳就可以了。

          注意,Crawlab將取文件名作為爬蟲名稱,這個(gè)您可以后期更改。另外,請不要將zip文件名設(shè)置為中文,可能會(huì)導(dǎo)致上傳不成功。

          瀏覽 25
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  97碰人人操 | 豆花视频网站在线 | 老肥骚逼| 91在线无码精品秘 蜜桃入口 | 手机AV在线播放 |