來自 Scrapy 官方賬號的推薦
需求分析
初級用戶:
只有一臺開發主機
能夠通過 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 -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
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 將在滿足特定觸發器時發送通知郵件 ,郵件正文包含當前運行任務的統計信息。
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 自動停止當前任務 ,如果當前時間在郵件工作時間內,則同時發送通知郵件。
GitHub 開源
活捉幾只官方大佬,趕緊前去圍觀吧,別忘了 Star 噢!