如何簡單高效地部署和監控分佈式爬蟲項目

需求分析

初級用戶:html

  • 只有一臺開發主機,但願可以直接經過瀏覽器部署和運行 Scrapy 爬蟲項目

進階用戶:python

  • 有一臺雲主機,但願集成身份認證
  • 但願可以定時自動啓動爬蟲任務,實現網頁信息監控

專業用戶:git

  • 有 N 臺雲主機,經過 Scrapy-Redis 構建分佈式爬蟲
  • 但願在頁面上直觀地查看全部雲主機的運行狀態
  • 但願可以自由選擇部分雲主機,批量部署和運行項目,實現集羣管理
  • 但願自動執行日誌分析,掌握爬蟲進度
  • 但願在出現特定類型的異常日誌時可以及時得到通知,包括自動中止當前爬蟲任務

安裝和配置

  1. 請先確保全部主機都已經安裝和啓動 Scrapyd,若是須要遠程訪問 Scrapyd,則需將 Scrapyd 配置文件中的 bind_address 修改成 bind_address = 0.0.0.0,而後重啓 Scrapyd service。
  2. 開發主機或任一臺主機安裝 ScrapydWebpip install scrapydweb
  3. 經過運行命令 scrapydweb 啓動 ScrapydWeb(首次啓動將自動在當前工做目錄生成配置文件)。
  4. 啓用 HTTP 基本認證(可選):
ENABLE_AUTH = True
USERNAME = 'username'
PASSWORD = 'password'
複製代碼
  1. 添加 Scrapyd server,支持字符串和元組兩種配置格式,支持添加認證信息和分組/標籤:
SCRAPYD_SERVERS = [
    '127.0.0.1',
    # 'username:password@localhost:6801#group',
    ('username', 'password', 'localhost', '6801', 'group'),
]
複製代碼
  1. 運行命令 scrapydweb 重啓 ScrapydWeb

訪問 Web UI

經過瀏覽器訪問並登陸 http://127.0.0.1:5000github

  • Servers 頁面自動輸出全部 Scrapyd server 的運行狀態。
  • 經過分組和過濾能夠自由選擇若干臺 Scrapyd server,而後在上方 Tabs 標籤頁中選擇 Scrapyd 提供的任一 HTTP JSON API,實現一次操做,批量執行

Servers

  • 經過集成 LogParser,Jobs 頁面自動輸出爬蟲任務的 pages 和 items 數據。
  • ScrapydWeb 默認經過定時建立快照將爬蟲任務列表信息保存到數據庫,即便重啓 Scrapyd server 也不會丟失任務信息。(issue 12)

Jobs

部署項目

  • 支持一鍵部署項目到 Scrapyd server 集羣
  • 經過配置 SCRAPY_PROJECTS_DIR 指定 Scrapy 項目開發目錄,ScrapydWeb 將自動列出該路徑下的全部項目,默認選定最新編輯的項目,選擇項目後便可自動打包和部署指定項目。
  • 若是 ScrapydWeb 運行在遠程服務器上,除了經過當前開發主機上傳常規的 egg 文件,也能夠將整個項目文件夾添加到 zip/tar/tar.gz 壓縮文件後直接上傳便可,無需手動打包爲 egg 文件。

Deploy

運行爬蟲

  • 經過下拉框直接選擇 project,version 和 spider。
  • 支持傳入 Scrapy settings 和 spider arguments。
  • 支持建立基於 APScheduler 的定時爬蟲任務。(如需同時啓動大量爬蟲任務,則需調整 Scrapyd 配置文件的 max-proc 參數)
  • 支持在 Scrapyd server 集羣上一鍵啓動分佈式爬蟲

Run

日誌分析和可視化

  • 若是在同一臺主機運行 Scrapyd 和 ScrapydWeb,建議設置 SCRAPYD_LOGS_DIRENABLE_LOGPARSER,則啓動 ScrapydWeb 時將自動運行 LogParser該子進程經過定時增量式解析指定目錄下的 Scrapy 日誌文件以加快 Stats 頁面的生成,避免因請求原始日誌文件而佔用大量內存和網絡資源。
  • 若是須要管理 Scrapyd server 集羣,建議在其他主機單獨安裝和啓動 LogParser ,緣由如上。
  • 若是安裝的 Scrapy 版本不大於 1.5.1,LogParser 將可以自動經過 Scrapy 內建的 Telnet Console 讀取 Crawler.stats 和 Crawler.engine 數據,以便掌握 Scrapy 內部運行狀態。

Stats

定時爬蟲任務

  • 支持查看爬蟲任務的參數信息,追溯歷史記錄
  • 支持暫停,恢復,觸發,中止,編輯和刪除任務等操做

Tasks

郵件通知

經過輪詢子進程在後臺定時模擬訪問 Stats 頁面,ScrapydWeb 將在知足特定觸發器時根據設定自動中止爬蟲任務併發送通知郵件,郵件正文包含當前爬蟲任務的統計信息。web

  1. 添加郵箱賬號:
SMTP_SERVER = 'smtp.qq.com'
SMTP_PORT = 465
SMTP_OVER_SSL = True
SMTP_CONNECTION_TIMEOUT = 10

EMAIL_USERNAME = ''  # defaults to FROM_ADDR
EMAIL_PASSWORD = 'password'
FROM_ADDR = 'username@qq.com'
TO_ADDRS = [FROM_ADDR]
複製代碼
  1. 設置郵件工做時間和基本觸發器,如下示例表明:每隔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
複製代碼
  1. 除了基本觸發器,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條或以上的 critical 級別的 log 時,ScrapydWeb 將自動中止當前任務,若是當前時間在郵件工做時間內,則同時發送通知郵件。redis

GitHub 開源

活捉幾隻官方大佬,趕忙前去圍觀吧。點個 Star 不迷路,歡迎提交 feature request!數據庫

my8100 / scrapydwebapi

star
相關文章
相關標籤/搜索