借助scrapyd,可以通過http請求遠端排程爬蟲。
#scrapy.cfg中加入deploy配置
#scrapyd安裝
pip install scrapyd
#啟動scrapyd,scrapyd-deploy上傳的檔案存放到~
#安裝scrapyd-client
pip install scrapyd-client
cd hyspider
#上傳hyspider到scrapyd
scrapyd-deploy
類似crontab,讓爬蟲每天定時執行:
所有渠道電影每天更新一次
所有渠道電影每天匹配一次
所有渠道**每天更新一次,**資訊請求量大,爬取可能失敗,每間隔5分鐘檢查一次是否還有**資訊需要重新爬取
每間隔17分鐘檢視**是否更新完畢,並進行**彙總更新price表
每間隔1小時更新影院最低價
每天刪除一次過期**
排程採用apscheduler,並記錄爬取狀態,由於資源有限,只爬取固定幾個城市的資訊,也可以通過命令列傳參主動啟動爬蟲和匹配過程。
ops.py原始碼:
usage: python ops.py [option]
-h or --help:顯示幫助資訊
-s or --schedule: 系統自動排程更新
-m or --movie: 更新電影資訊
--match-movie: 多渠道電影匹配
-c or --cinema:更新某個城市影院資訊,例如: -c 上海
--match-cinema: 某個城市多渠道影院匹配,例如: --match-cinema 上海
-p or --price:更新某個城市**資訊,例如: -p 上海
--match-price:某個城市多渠道**匹配,例如: --match-price 上海
monitor原始碼:
from hyspider.manager.price import pricemanager
from wxpy import *
# 初始化機械人
bot = bot()
# group_receiver = ensure_one(bot.groups().search('惠電影'))
me = bot.friends().search('jin')[0]
logger = get_wechat_logger(bot.file_helper)
sch = blockingscheduler()
price_manager = pricemanager.clone()
@sch.scheduled_job('cron', hour='6,7,8,9,10', id='notice_price_update_status')
def notice_price_update_status():
msg = price_manager.get_price_update_status()
logger.warning(msg)
@bot.register([me, bot.file_helper], text, except_self=false)
def get_price_update_status(msg):
print(msg)
if msg.text == 'h':
logger.warning("""
h: show help
s: get status
c: crawlers status
rs: restart scrapyd
ro: restart ops.py
""")
elif msg.text == 's':
notice_price_update_status() # 檢視**爬取狀態
elif msg.text == 'c':
from hyspider.settings import bot_name, scrapyd_server
import requests
import json
params =
rsp = requests.get(scrapyd_server + '/listjobs.json', params) # 檢視scrapyd上爬蟲執行狀態
res = json.loads(rsp.text)
running = res['running']
pending = res['pending']
s = '{} running, {}'.format(len(running), running)
logger.warning(s)
s = '{} pending, {}'.format(len(pending), pending)
logger.warning(s)
elif msg.text == 'rs':
ret_code = restart_process('scrapyd')
logger.warning(ret_code)
# 重啟scrapyd
def restart_process(process_name):
"""根據程序名重啟程序"""
import psutil
pid_list = psutil.pids()
for pid in pid_list:
try:
each_pro = psutil.process(pid)
if process_name.lower() in each_pro.name().lower():
each_pro.terminate()
each_pro.wait(timeout=3)
except psutil.nosuchprocess:
pass
cmd = 'start scrapyd -d {}'.format(os.path.expanduser('~'))
return os.system(cmd)
if __name__ == '__main__':
sch.start()
這樣,手機在手,就可以控制爬蟲了。
Linux系統運維之運維監控 pdf格式
linux系統運維之運維監控 本文是系統運維工程師的實用手冊 主要講解基於 linux 平台運維工作中需要掌握的監控知識 本文全部基於實際應用 部署步驟詳細 可以直接複製用於生產環境的安裝配置 幫助剛剛接觸 linux運維的朋友們,迅速搭建企業級的監控平台。本文共分為五個部分 第一部分簡單的介紹了監...
監控與運維
監控神器 普羅公尺修斯prometheus elk elasticsearch logstash和kibana。一種很典型的mvc思想,模型持久層,檢視層和控制層。logstash擔任控制層的角色,負責蒐集和過濾資料。elasticsearch擔任資料持久層的角色,負責儲存資料。kibana擔任檢視...
01 運維監控
聽聞前輩所說,在監控不發達的時代,出行基本靠走,安全基本靠狗,那個時候沒有自動化監控的概念,都是人工盯著機器,進行輪班 每天上班第一件事情就是去巡視一下,看看各項軟體列印的資訊是否有異常,順便拿execl記錄一下。現在如今的企業中,運維就要負責成百上千臺的機器,傳統的方式依然不行,沒有高大上的方法是...