需求分析
初級使用者:
- 只有一臺開發主機
- 能夠通過 Scrapyd-client 打包和部署 Scrapy 爬蟲專案,以及通過 Scrapyd JSON API 來控制爬蟲,感覺命令列操作太麻煩,希望能夠通過瀏覽器直接部署和執行專案
專業使用者:
- 有 N 臺雲主機,通過 Scrapy-Redis 構建分散式爬蟲
- 希望整合身份認證
- 希望在頁面上直觀地檢視所有云主機的執行狀態
- 希望能夠自由選擇部分雲主機,批量部署和執行爬蟲專案,實現叢集管理
- 希望自動執行日誌分析,以及爬蟲進度視覺化
- 希望在出現特定型別的異常日誌時能夠及時通知使用者,包括自動停止當前爬蟲任務
動圖演示
叢集多節點部署和執行爬蟲專案,點選檢視更多動圖
安裝和配置
- 請先確保所有主機都已經安裝和啟動 Scrapyd,如果需要遠端訪問 Scrapyd,則需將 Scrapyd 配置檔案中的 bind_address 修改為
bind_address = 0.0.0.0
,然後重啟 Scrapyd。 - 開發主機或任一臺主機安裝 ScrapydWeb:
pip install scrapydweb
- 通過執行命令
scrapydweb
啟動 ScrapydWeb(首次啟動將自動生成配置檔案)。 - 啟用 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 提供的所有 HTTP 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 頁面
- 爬蟲進度視覺化
郵件通知
基於後臺定時讀取和分析 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`等。
LOG_CRITICAL_THRESHOLD = 3
LOG_CRITICAL_TRIGGER_STOP = True
LOG_CRITICAL_TRIGGER_FORCESTOP = False
# ...
LOG_IGNORE_TRIGGER_FORCESTOP = False
複製程式碼
以上示例代表:當發現3條或3條以上的 critical 級別的 log 時,ScrapydWeb 自動停止當前任務,如果當前時間在郵件工作時間內,則同時傳送通知郵件。
GitHub 開源
活捉幾隻官方大佬,趕緊前去圍觀吧,別忘了 Star 噢!