scrapyd部署_如何通過 Scrapyd + ScrapydWeb 簡單高效地部署和監控分布式爬蟲項目

來自 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 噢!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457529.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457529.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457529.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最長上升子序列 (LIS算法(nlong(n)))

設 A[t]表示序列中的第t個數&#xff0c;F[t]表示從1到t這一段中以t結尾的最長上升子序列的長度&#xff0c;初始時設F [t] 0(t 1, 2, ..., len(A))。則有動態規劃方程&#xff1a;F[t] max{1, F[j] 1} (j 1, 2, ..., t - 1, 且A[j] < A[t])。 現在&#xff0c;我們仔細…

牛頓插值--python實現

from tabulate import tabulate import sympy""" 牛頓插值法 """class NewtonInterpolation:def __init__(self, x: list, y: list):self.Xi = xself

css搖曳的_HTML5+CSS3實現樹被風吹動搖晃

1新建html文檔。2書寫hmtl代碼。3書寫css代碼。.trunk, .trunk div { background: #136086; width: 100px; height: 10px; position: absolute; left: 50%; top: 70%; margin-left: -10px; -webkit-animation-name: rot; animation-name: rot; -webkit-animation-duration: 2.0…

素數路(prime)

素數路(prime) 題目描述 已知一個四位的素數&#xff0c;要求每次修改其中的一位&#xff0c;并且要保證修改的結果還是一個素數&#xff0c;還不能出現前導零。你要找到一個修改數最少的方案&#xff0c;得到我們所需要的素數。 例如把1033變到8179&#xff0c;這里是一個最短…

python多線程單核_002_Python多線程相當于單核多線程的論證

很多人都說python多線程是假的多線程!下面進行論證解釋:一、我們先明確一個概念&#xff0c;全局解釋器鎖(GIL)Python代碼的執行由Python虛擬機(解釋器)來控制。Python在設計之初就考慮要在主循環中&#xff0c;同時只有一個線程在執行&#xff0c;就像單CPU的系統中運行多個進…

detail:JSON parse error - Expecting value: line 1 column 1 (char 0)

detail":"JSON parse error - Expecting value: line 1 column 1 (char 0) 在調用接口時返回400錯誤&#xff0c;詳情是 {detail":"JSON parse error - Expecting value: line 1 column 1 (char 0)"}原因是傳送數據的格式有問題&#xff0c;不要使用…

【IDEA 2016】intellij idea tomcat jsp 熱部署

剛開始用IDEA&#xff0c;落伍的我&#xff0c;只是覺得IDEA好看。可以換界面。想法如此的low。 真是不太會用啊&#xff0c;弄好了tomcat。程序啟動竟然改動一下就要重啟&#xff0c;JSP頁面也一樣。 IDEA可以配置熱部署&#xff0c;打開tomcat配置頁面&#xff0c;將紅框處&a…

C# where用法解析

where 子句用于指定類型約束&#xff0c;這些約束可以作為泛型聲明中定義的類型參數的變量。1.接口約束。例如&#xff0c;可以聲明一個泛型類 MyGenericClass&#xff0c;這樣&#xff0c;類型參數 T 就可以實現 IComparable<T> 接口&#xff1a;public class MyGeneric…

ubuntu進入桌面自動啟動腳本_在 Ubuntu 下開機自啟動自己的 QT 程序而不啟動 Ubuntu 的桌面...

1. /etc/profile 方式實現這個功能&#xff0c;要完成兩步&#xff1a;1、系統設置-> 用戶賬戶-> 點擊我的賬戶-> 點擊右上角的解鎖-> 打開自動登錄-> 點擊右上角的鎖定-> 退出系統設置2、在 /etc/profile 文件的開頭添加執行 qt 程序的命令。如&#xff1a;…

Java obj與JSON互轉(jackson)

JSON 解析 常見的json解析器&#xff1a; jsonlibGson(谷歌)fastjson(阿里)jackson(Spring內置) jackson 依賴jar包 jackson-annotations/jackson-core/jackson-databind/ 官網下載地址 1. Java對象轉JSON 1.1 核心對象 ObjectMapper 1.2常用轉換方法 writeValue(參…

如何制作一個簡單的APP應用軟件?

如今隨著移動智能手機的普及&#xff0c;讓APP的市場一片繁榮&#xff0c;現在市場上的APP數量數不勝數&#xff0c;對于APP開發的我們很多外行人也許認為&#xff0c;開發APP是不是特別難&#xff0c;是不是只有資歷很高的程序員才能夠完成這個任務&#xff0c;或者說要想開發…

I/O重定向

每個進程都至少有3個信息&#xff1a;“標準輸入”stdin、“標準輸出”stdout、和“標準出錯”stderr。標準輸入通常來自鍵盤&#xff0c;標準輸出和標準錯誤輸出通常被發往屏幕&#xff08;并不會保存在磁盤文件中&#xff09;。有些時候&#xff0c;需要從文件讀取輸入&#…

java 自動裝拆箱

title: “java 自動裝拆箱” tags: Java 將基本數據類型封裝成對象的過程叫做裝箱&#xff08;boxing&#xff09;&#xff0c;反之基本數據類型對應的包裝類轉換為基本數據類型的過程叫做拆箱&#xff08;unboxing&#xff09;; 基本數據類型與其他對象的區別 基本數據類型 …

設計模式11---組合模式(Composite Pattern)

一、組合模式定義 將對象組合成樹形結構以表示“部分-整體”的層次結構&#xff0c;使得用戶對單個對象和組合對象的使用具有一致性。Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compos…

Linux 多核下綁定硬件中斷到不同 CPU(IRQ Affinity)

轉載 - Linux 多核下綁定硬件中斷到不同 CPU&#xff08;IRQ Affinity&#xff09; 作者 digoal 日期 2016-11-20 標簽 Linux , IRQ , 中斷 , CPU親和 , 綁定中斷處理CPU 背景 原文 http://www.vpsee.com/2010/07/load-balancing-with-irq-smp-affinity/ 原文 硬件中斷發生頻繁…

請列舉你了解的分布式鎖_這幾種常見的“分布式鎖”寫法,搞懂再也不怕面試官,安排!...

什么是分布式鎖&#xff1f;大家好&#xff0c;我是jack xu&#xff0c;今天跟大家聊一聊分布式鎖。首先說下什么是分布式鎖&#xff0c;當我們在進行下訂單減庫存&#xff0c;搶票&#xff0c;選課&#xff0c;搶紅包這些業務場景時&#xff0c;如果在此處沒有鎖的控制&#x…

leetcode 268

等差數列求值 1 class Solution {2 public:3 int missingNumber(vector<int>& nums) {4 int nnums.size();5 int kn*(n1)/2;6 for(int i0;i<n;i)7 k-nums[i];8 return k;9 } 10 }; 轉載于:https://www.cnblogs.…

301緩存重定向?301 Moved Permanently (from disk cache)

今天在寫一個博客系統時&#xff0c;發現首頁數據經常刷新不出來&#xff0c;甚至后端根本就沒有接受到這個請求&#xff0c;以為是Ajax的問題&#xff0c;但通過抓包發現Ajax請求確實已經發出去了&#xff0c;但狀態碼是 301 Moved Permanently (from disk cache),301是永久重…

Firefox 50優化Electrolysis

Mozilla正式發布Firefox 50。最新的版本中提升了來自多個內容進程用戶的用戶體驗&#xff0c;并修復了十幾個高影響的安全漏洞。\\在Firefox最新版本的變更中&#xff0c;我們注意到了它對于Electrolysis的進一步改進。Electrolysis是Mozilla實現在后臺進程中呈現和執行web相關…

ModuleNotFoundError: No module named '_ctypes' ERROR:Command errored out with exit status 1: python

Ubuntu下載 nginx 時報錯&#xff1a; ERROR: Command errored out with exit status 1:command: /usr/local/bin/python3.7 -c import sys, setuptools, tokenize; sys.argv[0] ""/tmp/pip-install-7e0xdb36/uwsgi/setup.py""; __file__""/tmp…