1. 程式人生 > >如何通過 Scrapyd + ScrapydWeb 簡單高效地部署和監控分散式爬蟲專案

如何通過 Scrapyd + ScrapydWeb 簡單高效地部署和監控分散式爬蟲專案

需求分析

  • 初級使用者:
    • 只有一臺開發主機
    • 能夠通過 Scrapyd-client 打包和部署 Scrapy 爬蟲專案,以及通過 Scrapyd JSON API 來控制爬蟲,感覺命令列操作太麻煩,希望能夠通過瀏覽器直接部署和執行專案
  • 專業使用者:
    • 有 N 臺雲主機,通過 Scrapy-Redis 構建分散式爬蟲
    • 希望整合身份認證
    • 希望在頁面上直觀地檢視所有云主機的執行狀態
    • 希望能夠自由選擇部分雲主機,一鍵部署和執行爬蟲專案,實現叢集管理
    • 希望自動執行日誌分析,以及爬蟲進度視覺化
    • 希望在出現特定型別的異常日誌時能夠及時通知使用者,包括自動停止當前爬蟲任務

 

安裝和配置

  1. 所有主機都已經安裝和啟動 Scrapyd
  2. 開發主機或任一臺主機安裝 ScrapydWeb:  pip install scrapydweb 
  3. 執行命令  scrapydweb -h ,將在當前工作目錄生成 scrapydweb_settings.py 配置檔案
  4. 啟用 HTTP 基本認證
    ENABLE_AUTH = True
    USERNAME = 'username'
    PASSWORD = 'password'
  5. 新增 Scrapyd server,支援字串和元組兩種配置格式,支援新增認證資訊和分組/標籤
    SCRAPYD_SERVERS = [
        
    '127.0.0.1', # 'username:[email protected]:6801#group', ('username', 'password', 'localhost', '6801', 'group'), ]
  6. 通過執行命令  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 頁面

 

  • 爬蟲進度視覺化

 

郵件通知

  1. 配置郵箱認證資訊
    SMTP_SERVER = 'smtp.qq.com'
    SMTP_PORT = 465
    SMTP_OVER_SSL = True
    SMTP_CONNECTION_TIMEOUT = 10
    
    FROM_ADDR = '[email protected]'
    EMAIL_PASSWORD = 'password'
    TO_ADDRS = ['[email protected]']
  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'等。以下示例為:當發現3條或3條以上的 critical 級別的 log 時自動停止當前任務,如果當前時間在郵件工作時間內,則同時傳送通知郵件。
    LOG_CRITICAL_THRESHOLD = 3
    LOG_CRITICAL_TRIGGER_STOP = True
    LOG_CRITICAL_TRIGGER_FORCESTOP = False
    ...
    LOG_IGNORE_TRIGGER_FORCESTOP = False

     

Github 開源

my8100 / scrapydweb 更多實用功能正在開發中,歡迎 Star 和提交 Issue