如何簡單高效地部署和監(jiān)控分布式爬蟲項(xiàng)目

如何簡單高效地部署和監(jiān)控分布式爬蟲項(xiàng)目,大佬們都是這樣搞的!

圖為本項(xiàng)目來自Scrapy官方賬號的推薦

一、需求分析

初級用戶:

  • 只有一臺開發(fā)主機(jī)
  • 能夠通過 Scrapyd-client 打包和部署 Scrapy 爬蟲項(xiàng)目,以及通過 Scrapyd JSON API 來控制爬蟲,感覺命令行操作太麻煩,希望能夠通過瀏覽器直接部署和運(yùn)行項(xiàng)目

專業(yè)用戶:

  • 有 N 臺云主機(jī),通過 Scrapy-Redis 構(gòu)建分布式爬蟲
  • 希望集成身份認(rèn)證
  • 希望在頁面上直觀地查看所有云主機(jī)的運(yùn)行狀態(tài)
  • 希望能夠自由選擇部分云主機(jī),批量部署和運(yùn)行爬蟲項(xiàng)目,實(shí)現(xiàn)集群管理
  • 希望自動(dòng)執(zhí)行日志分析,以及爬蟲進(jìn)度可視化
  • 希望在出現(xiàn)特定類型的異常日志時(shí)能夠及時(shí)通知用戶,包括自動(dòng)停止當(dāng)前爬蟲任務(wù)
如何簡單高效地部署和監(jiān)控分布式爬蟲項(xiàng)目,大佬們都是這樣搞的!

二、動(dòng)圖預(yù)覽

集群多節(jié)點(diǎn)部署項(xiàng)目和運(yùn)行爬蟲:

如何簡單高效地部署和監(jiān)控分布式爬蟲項(xiàng)目,大佬們都是這樣搞的!

三、安裝和配置

1、請先確保所有主機(jī)都已經(jīng)安裝和啟動(dòng) Scrapyd,如果需要遠(yuǎn)程訪問 Scrapyd,則需將 Scrapyd 配置文件中的 bind_address 修改為 bind_address = 0.0.0.0,然后重啟 Scrapyd。

2、開發(fā)主機(jī)或任一臺主機(jī)安裝 ScrapydWeb: pip install scrapydweb

3、運(yùn)行命令 scrapydweb -h,將在當(dāng)前工作目錄生成配置文件 scrapydweb_settings.py,可用于下文的自定義配置。

4、啟用 HTTP 基本認(rèn)證:

ENABLE_AUTH = True
USERNAME = 'username'
PASSWORD = 'password'

5、添加 Scrapyd server,支持字符串和元組兩種配置格式,支持添加認(rèn)證信息和分組/標(biāo)簽:

SCRAPYD_SERVERS = [
 '127.0.0.1',
 # 'username:password@localhost:6801#group',
 ('username', 'password', 'localhost', '6801', 'group'),
]

6、通過運(yùn)行命令 scrapydweb 啟動(dòng) ScrapydWeb

四、訪問 Web UI

通過瀏覽器訪問并登錄 http://127.0.0.1:5000

  • Overview 頁面自動(dòng)輸出所有 Scrapyd server 的運(yùn)行狀態(tài)
  • 通過分組和過濾可以自由選擇若干臺 Scrapyd server,調(diào)用 Scrapyd 提供的所有 HTTP JSON API,實(shí)現(xiàn)一次操作,批量執(zhí)行
如何簡單高效地部署和監(jiān)控分布式爬蟲項(xiàng)目,大佬們都是這樣搞的!

五、部署項(xiàng)目

  • 支持指定若干臺 Scrapyd server 部署項(xiàng)目
  • 通過配置 SCRAPY_PROJECTS_DIR 指定 Scrapy 項(xiàng)目開發(fā)目錄,ScrapydWeb 將自動(dòng)列出該路徑下的所有項(xiàng)目,選擇項(xiàng)目后即可自動(dòng)打包和部署指定項(xiàng)目:
如何簡單高效地部署和監(jiān)控分布式爬蟲項(xiàng)目,大佬們都是這樣搞的!
  • 如果 ScrapydWeb 運(yùn)行在遠(yuǎn)程服務(wù)器上,除了通過當(dāng)前開發(fā)主機(jī)上傳常規(guī)的 egg 文件,也可以將整個(gè)項(xiàng)目文件夾添加到 zip/tar/tar.gz 壓縮文件后直接上傳即可,無需手動(dòng)打包:
如何簡單高效地部署和監(jiān)控分布式爬蟲項(xiàng)目,大佬們都是這樣搞的!

六、運(yùn)行爬蟲

  • 通過下拉框直接選擇 project,version 和 spider
  • 支持傳入 Scrapy settings 和 spider arguments
  • 同樣支持指定若干臺 Scrapyd server 運(yùn)行爬蟲
如何簡單高效地部署和監(jiān)控分布式爬蟲項(xiàng)目,大佬們都是這樣搞的!

七、日志分析和可視化

  • 默認(rèn)情況下,ScrapydWeb 將在后臺定時(shí)自動(dòng)讀取和分析 Scrapy log 文件并生成 Stats 頁面
如何簡單高效地部署和監(jiān)控分布式爬蟲項(xiàng)目,大佬們都是這樣搞的!
  • 爬蟲進(jìn)度可視化
如何簡單高效地部署和監(jiān)控分布式爬蟲項(xiàng)目,大佬們都是這樣搞的!

八、郵件通知

基于后臺定時(shí)讀取和分析 Scrapy log 文件,*ScrapydWeb *將在滿足特定觸發(fā)器時(shí)發(fā)送通知郵件,郵件正文包含當(dāng)前運(yùn)行任務(wù)的統(tǒng)計(jì)信息。

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、設(shè)置郵件工作時(shí)間和基本觸發(fā)器,以下示例代表:每隔1小時(shí)或某一任務(wù)完成時(shí),并且當(dāng)前時(shí)間是工作日的9點(diǎn),12點(diǎn)和17點(diǎn),ScrapydWeb 將會(huì)發(fā)送通知郵件。

EMAIL_WORKING_DAYS = [1, 2, 3, 4, 5]
EMAIL_WORKING_HOURS = [9, 12, 17]
ON_JOB_RUNNING_INTERVAL = 3600
ON_JOB_FINISHED = True

3、除了基本觸發(fā)器,*ScrapydWeb *還提供了多種觸發(fā)器用于處理不同類型的 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

以上示例代表:當(dāng)發(fā)現(xiàn)3條或3條以上的 critical 級別的 log 時(shí),ScrapydWeb 自動(dòng)停止當(dāng)前任務(wù),如果當(dāng)前時(shí)間在郵件工作時(shí)間內(nèi),則同時(shí)發(fā)送通知郵件。

九、GitHub 開源

活捉幾只官方大佬,趕緊前去圍觀吧,別忘了 Star 噢!

https://github.com/my8100/scrapydweb

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容