如何通過 Scrapyd + ScrapydWeb 簡單高效地部署和監控分散式爬蟲
需求分析
- 初級用戶:
- 只有一台開發主機
- 能夠通過 Scrapyd-client 打包和部署 Scrapy 爬蟲項目,以及通過 Scrapyd JSON API 來控制爬蟲,感覺
命令行操作太麻煩
,希望能夠通過瀏覽器直接部署和運行項目 - 專業用戶:
- 有 N 台雲主機,通過 Scrapy-Redis 構建分散式爬蟲
- 希望集成身份認證
- 希望在頁面上直觀地查看所有雲主機的運行狀態
- 希望能夠自由選擇部分雲主機,
一鍵部署和運行爬蟲項目,實現集群管理
- 希望自動執行日誌分析,以及爬蟲進度可視化
- 希望在出現特定類型的異常日誌時能夠及時通知用戶,包括自動停止當前爬蟲任務
安裝和配置
- 所有主機都已經安裝和啟動 Scrapyd
- 開發主機或任一台主機安裝 ScrapydWeb: pip install scrapydweb
- 運行命令 scrapydweb -h ,將在當前工作目錄生成 scrapydweb_settings.py 配置文件
- 啟用 HTTP 基本認證
ENABLE_AUTH = True
USERNAME = "username"
PASSWORD = "password"
- 添加 Scrapyd server,支持字元串和元組兩種配置格式,支持添加認證信息和分組/標籤
SCRAPYD_SERVERS = [
"127.0.0.1",
# "username:password@localhost:6801#group",
("username", "password", "localhost", "6801", "group"),
]
- 通過運行命令 scrapydweb 啟動 ScrapydWeb
訪問 Web UI
通過瀏覽器訪問 http://127.0.0.1:5000,輸入認證信息登錄
- Overview 頁面自動輸出所有 Scrapyd server 的運行狀態
- 通過分組和過濾可以自由選擇若干台 Scrapyd server,調用 Scrapyd 提供的所有 JSON API,
實現一次點擊,批量執行
部署項目
- 支持指定若干台 Scrapyd server 部署項目
- 通過配置 SCRAPY_PROJECTS_DIR 指定 Scrapy 項目開發目錄,ScrapydWeb 將自動列出該路徑下的所有項目,自動打包和部署指定項目
- 如果 ScrapydWeb 並非運行於當前開發主機,除了支持上傳常規的 egg 文件,也可以將整個項目文件夾添加到 zip/tar/tar.gz 壓縮文件後直接上傳即可
運行爬蟲
- 通過下拉框直接選擇 project,version 和 spider
- 支持傳入 Scrapy settings 和 spider arguments
- 同樣支持指定若干台 Scrapyd server 運行爬蟲
日誌分析和可視化
- ScrapydWeb
默認在後台定時自動讀取和分析 Scrapy log 文件並生成 Stats 頁面
- 爬蟲進度可視化
郵件通知
- 配置郵箱認證信息
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
※mysql意外宕機現象分析
※打通前後端構建一個Vue+Express的開發環境
TAG:程序員小新人學習 |