只有一臺開發主機html
可以經過 Scrapyd-client 打包和部署 Scrapy 爬蟲項目,以及經過 Scrapyd JSON API 來控制爬蟲,感受命令行操做太麻煩,但願可以經過瀏覽器直接部署和運行項目git
有 N 臺雲主機,經過 Scrapy-Redis 構建分佈式爬蟲github
但願集成身份認證web
但願在頁面上直觀地查看全部雲主機的運行狀態redis
但願可以自由選擇部分雲主機,批量部署和運行爬蟲項目,實現集羣管理瀏覽器
但願自動執行日誌分析,以及爬蟲進度可視化scrapy
但願在出現特定類型的異常日誌時可以及時通知用戶,包括自動中止當前爬蟲任務分佈式
集羣多節點部署和運行爬蟲項目:動圖演示,上傳、打包、運行。ide
1 請先確保全部主機都已經安裝和啓動 Scrapyd,若是須要遠程訪問 Scrapyd,則需將 Scrapyd 配置文件中的 bind_address 修改成 bind_address = 0.0.0.0
,而後重啓 Scrapyd。post
可使用find命令或啓動scrapyd,找到scrapyd目錄下的 default_scrapyd.conf 文件,修改其中bind_address。
2 開發主機或任一臺主機安裝 ScrapydWeb: pip install scrapydweb
3 經過運行命令 scrapydweb -h
啓動 ScrapydWeb(首次啓動將在當前工做目錄自動生成scrapydweb_settings.py配置文件)
4 啓用 HTTP 基本認證(可選)
ENABLE_AUTH = True USERNAME = 'username' PASSWORD = 'password'
5 添加 Scrapyd server,支持字符串和元組兩種配置格式,支持添加認證信息和分組/標籤
SCRAPYD_SERVERS = [
'127.0.0.1', # 'username:password@localhost:6801#group', ('username', 'password', 'localhost', '6801', 'group'), ]
scrapydweb
啓動scrapydweb。
經過瀏覽器訪問 http://127.0.0.1:5000,輸入認證信息登陸
1 Overview 頁面自動輸出全部 Scrapyd server 的運行狀態
2 經過分組和過濾能夠自由選擇若干臺 Scrapyd server,調用 Scrapyd 提供的全部 JSON API,實現一次點擊,批量執行
1 支持指定若干臺 Scrapyd server 部署項目
2 經過配置文件 SCRAPY_PROJECTS_DIR 指定 Scrapy 項目開發目錄,ScrapydWeb 將自動列出該路徑下的全部項目,自動打包和部署指定項目
選擇
點擊 Select 選擇一個你須要分析的爬蟲日誌文件,能夠是爬蟲自定義的生成的日誌,也能夠是scrapydweb生成的日誌。選好以後,點擊右邊,雲朵形狀的圖案,上傳。頁面自動跳轉。
爬蟲進度可視化
日誌分類查看
基於後臺定時讀取和分析 Scrapy log 文件,ScrapydWeb 將在知足特定觸發器時發送通知郵件,郵件正文包含當前運行任務的統計信息。
配置郵箱認證信息
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']
設置郵件工做時間和定時通知間隔,如下示例爲:每隔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
基於後臺定時執行日誌分析,ScrapydWeb 提供多種 log 類型觸發器及其閾值設置,包括 'CRITICAL', 'ERROR', 'WARNING', 'REDIRECT', 'RETRY', 'IGNORE'等。如下示例爲:當發現3條或3條以上的 critical 級別的 log 時自動中止當前任務,若是當前時間在郵件工做時間內,則同時發送通知郵件。
LOG_CRITICAL_THRESHOLD = 3
LOG_CRITICAL_TRIGGER_STOP = True LOG_CRITICAL_TRIGGER_FORCESTOP = False ... LOG_IGNORE_TRIGGER_FORCESTOP = False
歡迎有疑問的朋友能夠在評論區交流。
本文轉載自 https://juejin.im/post/5bebc5fd6fb9a04a053f3a0e,部份內容有修改,增長。