四大爬蟲管理平台
- Crawlab
- Gerapy
- Scrapydweb
- SpiderKeeper
- scrapyd
Crawlab
- 前端:vue-element-admin
- 后端:go
- 不局限於語言和scrapy,
運行
第一步:部署
docker pull tikazyq/crawlab:latest
安裝完docker-compose和定義好docker-compose.yml后,只需要運行以下命令就可以啟動Crawlab。
注意需要自己參考官網定義這個docker-compose.yml
docker-compose up
第二步,使用
1,節點管理
節點可以看作是一個服務器。節點負責執行爬蟲任何、提供API等功能。節點之間是可以相互通信的,節點通信主要通過Redis。
查看節點列表
查看節點拓撲圖
2,爬蟲
爬蟲就是我們通常說的網絡爬蟲了
創建爬蟲
部署爬蟲
運行爬蟲
統計數據--這一點很好
3,任務
任務其實就是指某一次抓取任務或采集任務。任務與爬蟲關聯,其執行的也是爬蟲指定的執行命令或采集規則。
抓取或采集的結果與任務關聯,因此可以查看到每一次任務的結果集。
Crawlab的任務是整個采集流程的核心,抓取的過程都是跟任務關聯起來的,因此任務對於Crawlab來說非常重要。
任務被主節點觸發,工作節點通過任務隊列接收任務,然后在其所在節點上執行任務。
查看任務
操作任務
下載結果
定時任務
4,缺少的功能
異常監控(零值、空值)、可配置爬蟲、可視化抓取、日志集中收集
Gerapy
- 前端:vue
- 后端:python-Django
- 基於scrapyd,只支持scrapy
運行
第一步,github下載源碼
git clone https://github.com/Gerapy/Gerapy.git
第二步:新建虛擬環境安裝依賴,
# python setup.py install
第三步,migrate
cd gerapy
gerapy migrate
第四步,創建超級管理員
gerapy createsuperuser
admin/admin
第五步,運行
gerapy runserver
http://localhost:8000
可以正常登陸進去就成功了
第六步,使用
1,主機管理
添加我們需要管理的 Scrapyd 服務:
需要添加 IP、端口,以及名稱,點擊創建即可完成添加,點擊返回即可看到當前添加的 Scrapyd 服務列表
狀態一欄看到各個 Scrapyd 服務是否可用,同時可以一目了然當前所有 Scrapyd 服務列表,另外我們還可以自由地進行編輯和刪除。
2,項目管理
2.1 新建項目
Gerapy 的核心功能當然是項目管理,在這里我們可以自由地配置、編輯、部署我們的 Scrapy 項目,點擊左側的 Projects 。
假設現在我們有一個 Scrapy 項目,如果我們想要進行管理和部署,還記得初始化過程中提到的 projects 文件夾嗎?
這時我們只需要將項目拖動到剛才 gerapy 運行目錄的 projects 文件夾下,例如我這里寫好了一個 Scrapy 項目,名字叫做 jd,這時把它拖動到 projects 文件夾下:
這時刷新頁面,我們便可以看到 Gerapy 檢測到了這個項目,同時它是不可配置、沒有打包的
2.2 打包項目
這時我們可以點擊部署按鈕進行打包和部署,在右下角我們可以輸入打包時的描述信息,類似於 Git 的 commit 信息,
然后點擊打包按鈕,即可發現 Gerapy 會提示打包成功,同時在左側顯示打包的結果和打包名稱
2.3 部署項目
打包成功之后,我們便可以進行部署了,我們可以選擇需要部署的主機,點擊后方的部署按鈕進行部署,同時也可以批量選擇主機進行部署
可以發現此方法相比 Scrapyd-Client 的命令行式部署,簡直不能方便更多。
2.4 在線編輯
同時 Gerapy 還支持項目編輯功能,有了它我們不再需要 IDE 即可完成項目的編寫,我們點擊項目的編輯按鈕即可進入到編輯頁面,
3,監控任務
部署完畢之后就可以回到主機管理頁面進行任務調度了,任選一台主機,點擊調度按鈕即可進入任務管理頁面,此頁面可以查看當前 Scrapyd 服務的所有項目、所有爬蟲及運行狀態:
我們可以通過點擊新任務、停止等按鈕來實現任務的啟動和停止等操作,同時也可以通過展開任務條目查看日志詳情:
另外我們還可以隨時點擊停止按鈕來取消 Scrapy 任務的運行。
這樣我們就可以在此頁面方便地管理每個 Scrapyd 服務上的 每個 Scrapy 項目的運行了。
4,代碼生成
上面寫好的scrapy是不支持配置的,
我們可以借助於 Gerapy 方便地完成編輯、部署、控制、監測等功能,
步驟:
1,我們可以點擊項目頁面的右上角的創建按鈕,增加一個可配置化爬蟲,
2,接着我們便可以:
添加提取實體
爬取規則
抽取規則了,
3,最后點擊生成按鈕即可完成代碼的生成。
生成的代碼示例結果其結構和 Scrapy 代碼是完全一致的。
后續都是一樣的操作,部署,啟動,監控
缺點:
1,很明顯沒有告警
2,很明顯沒有日志解析
但是頁面的確非常符合國人
Scrapydweb
- 前端:Element,EChartssssss
- 后端:python-flask
- 基於scrapyd,只支持scrapy
運行
第一步,github下載源碼
git clone https://github.com/my8100/scrapydweb.git
第二步:新建虛擬環境安裝依賴,
cd scrapydweb
python setup.py install
第三步:運行scrapyd
命令:scrapyd
因為這個服務是基於scrapyd的
第四步:啟動scrapydweb
通過運行命令 scrapydweb 啟動 ScrapydWeb(首次啟動將自動生成配置文件)。
訪問 http://127.0.0.1:5000
注意:如果出現6801端口無法連接,這個是因為你沒有配置集群環境,不用擔心
第五步:配置
(基本上使用默認的就行,根據需要配置)
運行scrapydweb會自動生成scrapydweb_settings_v10.py的文件
配置文件在你當前啟動scrapydweb路徑下,scrapydweb_settings_v10.py,只有兩處需要配置。
①第一處就是username和password,如果是遠程的服務器的話,建議開啟認證
②第二處是項目路徑SCRAPY_PROJECTS_DIR = ''(這里是scrapydweb比較方便的地方,不用事先將項目先上傳到scrapyd服務器,scrapydweb能夠幫我們上傳)
配置完成之后,注意重啟scrapydweb
其他配置
1,配置scrapyd服務器節點
然后打開文件, 修改
SCRAPYD_SERVERS = [
'127.0.0.1:6800',
# 'username:password@localhost:6801#group',
# ('username', 'password', 'localhost', '6801', 'group'),
]
2,配置日志解析
有兩種方案
一、scrapydweb和scrapyd在同一台服務器
LOCAL_SCRAPYD_LOGS_DIR = '' # 指定scrapyd的logs文件路徑
ENABLE_LOGPARSER = False # 不自動啟用logparser
二、scrapydweb和scrapyd不在同一個服務器
在scrapyd服務器上安裝logparser, 然后運行
logparser -dir scrapyd的日志目錄
安裝完成以后, 通過http://127.0.0.1:6800/logs/stats.json就可以看到logparser解析出來的日志了
3,開啟scrapydweb安全認證
在配置文件scrapydweb_settings_v10.py中
# The default is False, set it to True to enable basic auth for the web UI.
ENABLE_AUTH = True # False是禁用
# In order to enable basic auth, both USERNAME and PASSWORD should be non-empty strings.
USERNAME = '123' # 用戶名
PASSWORD = '123' # 密碼
開啟以后重啟服務, 刷新就可以看到需要輸入用戶名和密碼了
4,開啟https
在配置文件scrapydweb_settings_v10.py中
ENABLE_HTTPS = True # True是開啟, False關閉
# e.g. '/home/username/cert.pem'
CERTIFICATE_FILEPATH = ''
# e.g. '/home/username/cert.key'
PRIVATEKEY_FILEPATH = ''
5,運行爬蟲的默認設置
在配置文件scrapydweb_settings_v10.py中
SCHEDULE_EXPAND_SETTINGS_ARGUMENTS = False # Run Spider頁面是否自動展開settings & arguments選項卡
SCHEDULE_CUSTOM_USER_AGENT = 'Mozilla/5.0' # 調度爬蟲時默認的UA
SCHEDULE_USER_AGENT = ['custom', 'Chrome', 'iPhone', 'iPad', 'Android'] # 可選擇的UA 列表
SCHEDULE_ROBOTSTXT_OBEY = None # 是否開啟檢測robots.txt文件
SCHEDULE_COOKIES_ENABLED = None # 是否開啟cookie
SCHEDULE_CONCURRENT_REQUESTS = None # 並發請求數
SCHEDULE_DOWNLOAD_DELAY = None # 下載延遲時間
SCHEDULE_ADDITIONAL = "-d setting=CLOSESPIDER_TIMEOUT=60\r\n-d setting=CLOSESPIDER_PAGECOUNT=10\r\n-d arg1=val1" # Run Spider界面自動附加參數
第六步:功能列表
1,管理scrapyd集群
2,定時任務(定時運行爬蟲)
3,任務列表管理
4,部署爬蟲
5,手動調用爬蟲
6,項目管理
7,配合logparser進行日志解析
8,支持手機ui
第七步:scrapydweb的使用
1,部署爬蟲
打開配置文件
SCRAPY_PROJECTS_DIR=爬蟲項目的上一級目錄, 也就是`scrapy.cfg`文件所在的上一級目錄
然后點擊左側Deploy Project
第一個tab是一鍵部署
第二個tab是上傳文件部署
支持一鍵部署項目到 Scrapyd server 集群。
2,運行爬蟲
點擊左側Run Spider 然后選擇要運行的服務器、項目、版本、爬蟲, 以及要覆蓋的配置項、傳給爬蟲的參數
點擊Check CMD按鈕生成命令
然后點擊Run Spider就可以手動運行爬蟲了
timer task是添加一個定時任務.
3,查看爬蟲運行情況以及日志
點擊左側的Job按鈕, 就可以看到我們所有運行過的任務,
點擊藍色的Stats即可查看爬蟲運行產生的日志信息
點擊綠色的Start的按鈕,可以再次運行爬蟲
4,郵件通知
基於后台定時讀取和分析 Scrapy log 文件,ScrapydWeb 將在滿足特定觸發器時發送通知郵件,郵件正文包含當前運行任務的統計信息。
1、添加郵箱帳號:
SMTP_SERVER = 'smtp.qq.com'
SMTP_PORT = 465
SMTP_OVER_SSL = True
SMTP_CONNECTION_TIMEOUT = 10
FROM_ADDR = 'username@qq.com'
EMAIL_PASSWORD = 'password'
TO_ADDRS = ['username@qq.com']
2、設置郵件工作時間和基本觸發器,以下示例代表:每隔1小時或某一任務完成時,並且當前時間是工作日的9點,12點和17點,ScrapydWeb 將會發送通知郵件。
EMAIL_WORKING_DAYS = [1, 2, 3, 4, 5]
EMAIL_WORKING_HOURS = [9, 12, 17]
ON_JOB_RUNNING_INTERVAL = 3600
ON_JOB_FINISHED = True
3、除了基本觸發器,ScrapydWeb 還提供了多種觸發器用於處理不同類型的 log,包括 'CRITICAL', 'ERROR', 'WARNING', 'REDIRECT', 'RETRY' 和 'IGNORE'等。
LOG_CRITICAL_THRESHOLD = 3
LOG_CRITICAL_TRIGGER_STOP = True
LOG_CRITICAL_TRIGGER_FORCESTOP = False
#...
LOG_IGNORE_TRIGGER_FORCESTOP = False
以上示例代表:當發現3條或3條以上的 critical 級別的 log 時,ScrapydWeb 自動停止當前任務,如果當前時間在郵件工作時間內,則同時發送通知郵件。
遺留問題
1,我沒有搞懂這個告警是怎么回事
2,我沒搞懂這個log解析是怎么回事,
缺點
1,沒有統計報表
但是已經比spiderkeeper更加完善了,
SpiderKeeper
- 前后端不分離,
- 使用python-flask
- 基於scrapyd,只支持scrapy
運行
第一步:github下載源碼
第二步:新建虛擬環境,安裝包
pip install scrapy
pip install scrapyd
pip install scrapyd-client
pip install -r requirements.txt
第三步:運行scrapyd
命令:scrapyd
因為這個服務是基於scrapyd的
第四步:運行SpiderKeeper項目
訪問http://0.0.0.0:5000/
admin/admin
第五步:頁面使用
1,項目管理
創建項目,
查看運行統計結果,
2,爬蟲管理
打包egg文件 scrapyd-deploy --build-egg output.egg
上傳egg文件,提交以后看到部署成功即可
查看爬蟲列表,
3,任務管理(最重要!!)
3.1 查看執行結果
單次執行 runonce
下一個任務,
正在執行的任務,可以看日志,可以stop,
完成的任務,可以看日志,方便定位問題,
3.2 任務管理
創建任務,定時執行,可以配置執行策略
刪除任務,運行任務(單次執行),關閉任務,啟動任務,刪除任務
缺點
1,頁面沒有翻頁
2,頁面沒有查詢
3,沒有節點管理
4,沒有任務告警
scrapyd
- 這是scrapy官方提供的部署scrapy的一個service,
- 可以部署你的scrapy項目,並且提供了api,操控你的爬蟲
- 官方文檔:http://scrapyd.readthedocs.org/
- scrapyd是放在服務端的,有一個scrapy-client,可以和scrapyd交互發布爬蟲到遠程服務端
- 因為scrapyd的管理界面太丑了(公認的), 並且很多功能都需要自己寫接口請求json API才可以, 所以有很多三方的scrapyd的web管理工具.
scrapyd使用-參考官方文檔
第一步:安裝:
pip install scrapyd
pip install scrapyd-client
第二步:啟動服務命令:scrapyd
http://127.0.0.1:6800/
第三步:進入scrapy項目根目錄
scrapy項目根目錄有一個scrapy.cfg
[deploy]
#url = http://localhost:6800/
project = scrapy_demo1
打開這個url,定義爬蟲服務名,[deploy:baby]
第四步:使用scrapy-client打包項目
進入scrapy項目根目錄
scrapyd-deploy -l 查看
scrapy list 查看所有爬蟲列表
scrapyd-deploy 部署名稱 -p 項目名稱
比如:scrapyd-deploy baby -p scrapy_demo1
這個時候在web端就能看到項目了
第五步:運行爬蟲
curl http://localhost:6800/daemonstatus.json 查看服務的狀態
curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider 運行爬蟲
第六步:管理爬蟲
curl http://localhost:6800/cancel.json -d project=scrapy項目名稱 -d job=運行ID 停止爬蟲
curl http://localhost:6800/delproject.json -d project=scrapy項目名稱 刪除scrapy項目 注意:一般刪除scrapy項目,需要先執行命令停止項目下在遠行的爬蟲
curl http://localhost:6800/listprojects.json 查看有多少個scrapy項目在api中
curl http://localhost:6800/listspiders.json?project=scrapy項目名稱 查看指定的scrapy項目中有多少個爬蟲
curl http://localhost:6800/daemonstatus.json 查看服務的狀態,也可以監控爬蟲進程。
curl http://127.0.0.1:6800/listversions.json?project=myproject 獲取項目下已發布的爬蟲版本列表
curl http://127.0.0.1:6800/listjobs.json?project=myproject 獲取爬蟲運行狀態
http://127.0.0.1:6800/schedule.json (post方式,data={“project”:myproject,“spider”:myspider}) 啟動服務器上某一爬蟲(必須是已發布到服務器的爬蟲)
http://127.0.0.1:6800/delversion.json (post方式,data={“project”:myproject,“version”:myversion}) 刪除某一版本爬蟲
http://127.0.0.1:6800/delproject.json(post方式,data={“project”:myproject}) 刪除某一工程,包括該工程下的各版本爬蟲
第七步:常用腳本
循環任務:
while true
do
curl http://127.0.0.1:6800/schedule.json -d project=FXH -d spider=five_sec_info
sleep 10
done
實時時間打印:
echo "$(date +%Y-%m-%d:%H:%M.%S), xx-spider定時啟動--"
SwordCaster
- 構思自己的爬蟲管理平台
- 前端:vue-element-admin
- 后端:python-flask
- 基於scrapyd,只支持scrapy
項目構思
項目構思
1,節點管理
- 節點注冊
- 節點之間通信
- 節點監控
2,項目管理
- 添加項目
- 部署項目
3,爬蟲管理
- 查看爬蟲運行記錄
- 爬蟲配置
- 爬蟲版本管理
4,任務管理
- 任務添加,刪除,修改,
- 任務調度,執行,暫停,
- 定時任務
- 查看任務結果
- 技術路線:APScheduler
5,告警管理
- 監控任務是否正常
- 監控爬取結果是否正常,是否有空值等
- 監控日志是否有異常,
- 上面有異常要進行失敗告警,
6,報表管理
- 主機統計
- 項目統計
- 爬蟲運行數據統計
- 爬蟲日志管理
- 結果導出
7,高級
- 可視化配置抓取規則
- 代理池
- cookie池
- 異常監控
- 在線編輯代碼
- 消息通知
- 移動界面
8,持續集成
構建持續集成(CI)工作流
對於企業來說,軟件開發一般是一個自動化過程。
它會經歷需求、開發、部署、測試、上線這幾個步驟。而這個流程一般是不斷迭代(Iterative)的,需要不斷更新和發布。
以爬蟲為例,您上線了一個爬蟲,這個爬蟲會定期抓取網站數據。
但突然有一天您發現數據抓不到了,您快速定位原因,發現原來是網站改版了,您需要更改爬蟲抓取規則來應對網站的改版。
總之,您需要發布一個代碼更新。最快的做法是直接在線上更改代碼。但這樣做非常危險:
第一,您無法測試您更新后的代碼,只能通過不斷調整線上代碼來測試是否抓取成功;
第二,您無法記錄這次更改,后期如果出了問題您很可能會忽略掉這次更改,從而導致 bug。
您需要做的,無非是將您的爬蟲代碼用版本管理工具管理起來。我們有很多版本管理工具,最常用的就是 git、subversion,
版本管理平台包括 Gitlab、Bitbucket、自搭 Git 倉庫等。
當我們更新了代碼,我們需要將更新后的代碼發布到線上服務器。這時您需要用自己寫部署腳本,
或者更方便的,用 Jenkins 作為持續集成(Continuous Integration)管理平台。
Jenkins 是一個持續集成平台,可以通過獲取版本庫來更新部署代碼,是非常實用的工具,在很多企業中都有用到。
如果把爬蟲管理平台應用到持續集成工作流程中,這是一個問題,
我們做持續集成,步驟如下:
1,用 Gitlab 或其他平台搭建好代碼倉庫;
2,在 Jenkins 中創建一個項目,在項目中將代碼源指向之前創建的倉庫;
3,在 Jenkins 項目中編寫工作流,將發布地址指向 Crawlab 的CRAWLAB_SPIDER_PATH,如果是 Docker 注意將該地址掛載到宿主機文件系統;
4,Jenkins 項目的工作可以直接編寫,也可以用 Jenkinsfile,具體可以查相關資料;
5,這樣,每一次代碼更新提交到代碼倉庫后,Jenkins 就會將更新后的代碼發布到 Crawlab 里,Crawlab 主節點會將爬蟲代碼同步到工作節點,以待抓取。
# 使用爬蟲管理平台的好處
- 命令行之間來回切換,非常容易出錯
- 不用 shell 命令一個一個來查看日志來定位錯誤原因