如何經過 Scrapyd + ScrapydWeb 簡單高效地部署和監控分佈式爬蟲項目

twitter

安裝和配置

  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:5000。html

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

servers

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

jobs

部署項目

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

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 將在知足特定觸發器時根據設定自動中止爬蟲任務併發送通知郵件,郵件正文包含當前爬蟲任務的統計信息。python

  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 將自動中止當前任務,若是當前時間在郵件工做時間內,則同時發送通知郵件。git

移動端 UI

mobileui

GitHub 開源

my8100/scrapydwebgithub

相關文章
相關標籤/搜索