前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WebMonitor 实时监控网页变化,并发送通知程序

WebMonitor 实时监控网页变化,并发送通知程序

作者头像
暮城
发布2022-03-07 10:04:35
10.7K1
发布2022-03-07 10:04:35
举报
文章被收录于专栏:建站闲谈建站闲谈

简介

WebMonitor 是一款 python 写的开源的网页监控程序,能监控网页变化和 RSS 更新,并支持多种通知方式。

功能

  • 支持requests请求网页,支持使用PhantomJS抓取异步加载的网页
  • 支持 xpath 和 css selector 选择器,支持 JsonPath 提取 json 数据
  • 支持邮件,pushover,微信提醒(support by server酱),Bark推送,自定义GET/POST通知, Slack 通知以及 Telegram 通知
  • 支持一个任务多个选择器提取信息
  • 支持自定义消息模板
  • 简洁的UI,可视化操作
  • 支持自定义请求头,抓取需要登录的网页
  • 支持设置监控规则
  • 监控RSS更新
  • 数据导入导出

部署

手动部署

安装

下载 WebMonitor 的源码

代码语言:javascript
复制
git clone https://github.com/LogicJake/WebMonitor.git
cd WebMonitor

下载完成后安装依赖

代码语言:javascript
复制
pip install -r requirements.txt

如果需要使用无头浏览器,请确认已经安装 phantomjs,且 phantomjs 被添加到系统路径

首次运行需要迁移数据库且设置管理账号,假设账号为 admin,密码为 password,运行端口为 8000

代码语言:javascript
复制
python manage.py migrate
python manage.py initadmin --username admin --password password
python manage.py runserver 0.0.0.0:8000 --noreload

非首次运行,只需指定端口

代码语言:javascript
复制
python manage.py runserver 0.0.0.0:8000 --noreload

Docker 部署

安装

运行下面的命令下载 WebMonitor 镜像

代码语言:javascript
复制
docker pull logicjake/webmonitor

然后运行 webmonitor 即可,假设账号为 admin,密码为 password,运行端口为 8000 强烈建议通过 docker 文件夹映射参数 -v,将数据库文件保存到主机,否则在容器重建之后会丢失数据库文件,假设映射的主机目录为 /etc/webmonitor

代码语言:javascript
复制
docker run -d --name webmonitor -v /etc/webmonitor:/app/db -p 8000:8000 -e PORT=8000 -e USERNAME=admin -e PASSWORD=password logicjake/webmonitor

您可以使用下面的命令来关闭 webmonitor

代码语言:javascript
复制
docker stop webmonitor

预览

使用

设置通知方式

支持7种通知方式:邮件,pushover, Server 酱的微信提醒,Bark,自定义GET/POST通知, Slack 通知以及 Telegram 通知。邮件提醒只需要设置接收邮箱,微信提醒需要申请 SCKEY,自行搜索 Server 酱注册,简单免费。Pushover 需要填写注册就得到的 User Key。Bark需要安装客户端取得对应设备Key。Slack 需要填写“#”开头的 channel 名称,且需要保证 Slack app 已在该 channel 中。

设置系统邮箱

如果采用邮件提醒,则必须设置“系统管理/系统邮箱”,该邮箱为提醒邮件的发信人。自行根据需要使用的邮箱查找相关设置,密码一般指授权码。

系统邮箱配置只需设置一个,多于一个默认只生效第一条。

设置 Pushover Application

如果采用 Pushover 提醒,则必须设置“系统管理/Pushover 设置”中的 Pushover api token。

设置 Slack

如果采用 Slack 提醒,则必须设置“系统管理/Slack 设置”中的 Slack OAuth Access Token。具体教程见:https://github.com/slackapi/python-slack-sdk/blob/main/tutorial/01-creating-the-slack-app.md

设置 Telegram Bot

如果采用 Telegram 提醒,则必须设置“系统管理/Telegram Bot 设置”中的 Telegram Bot Token。

设置自定义GET/POST通知

如果采用自定义通知,则必须设置自定义网址。

GET

{header}{content}替换掉标题和内容的位置。以Bark为例,格式如下:

代码语言:javascript
复制
https://api.day.app/yourkey/{header}/{content}
POST

发送网址{data=}。将要发送的body内容放在{data=}内,其中{header}{content}替换掉标题和内容的位置。以WxPusher为例,格式如下:

代码语言:javascript
复制
http://wxpusher.zjiecode.com/api/send/message{data={
  "appToken":"AT_xxx",
  "content":{content},
  "summary":{header},
  "contentType":3,
  "uids":["UID_xxxx"],
  "url":"http://wxpusher.zjiecode.com"
}}

添加网页监控任务

在 任务管理 > 网页监控管理 添加新任务

  • 必须选择一种通知方式
  • 默认抓取频率为5分钟,自行根据需要调整,单位分钟,不建议调太快,以防反爬
选择器

元素选择器类型可以选择 Xpath, Css selector 或 JsonPath。

一行一个元素选择器,每一行的格式为:选择器名称{选择器内容},例如:

代码语言:javascript
复制
title{//*[@id="id3"]/h3/text()}
myurl{//*[@id="id3"]/h3/text()}

以下字段为系统默认保留字段,请不要使用且无法被覆盖:

  • url:该任务对应的监控网址

可以借助浏览器 F12 直接 copy 前两种选择器,需要注意的是,往往浏览器 copy 得到是元素,而不是文本信息,需要做以下补充:

xpath
  • 获取元素文本信息,在浏览器得到的选择器后加/text(),如 //*[@id="id3"]/h3 => //*[@id="id3"]/h3/text()
  • 获取元素属性信息,在浏览器得到的选择器后加/@属性名,如想获取元素href值 //*[@id="id3"]/h3 => //*[@id="id3"]/h3/@href
  • 获取元素及其子元素的所有文本信息,在浏览器得到的选择器后加/string(),如 //*[@id="id3"]/h3 => //*[@id="id3"]/h3/string()
css selector
  • 获取元素文本信息,在浏览器得到的选择器后加::text,如 div#id3 > h3 => div#id3 > h3::text
  • 获取元素属性信息,在浏览器得到的选择器后加::attr(属性名),如想获取元素href值 div#id3 > h3 => div#id3 > h3::attr(href)
JsonPath

针对返回 json 数据的接口, 可以使用 JsonPath 提取数据, 具体教程参考 https://goessner.net/articles/JsonPath/ 在Chrome F12开发者工具中,也可以找到对应元素,然后右键该元素,选择“Copy Property Path”。

消息体模板

消息体模板可为空,如果为空,则按照元素选择器的定义顺序以制表符为间隔拼接为字符串。下面介绍消息体模板的使用方式,如果元素选择器的设置为:

代码语言:javascript
复制
title{//*[@id="id3"]/h3/text()}
myurl{//*[@id="id3"]/h3/text()}

则消息体模板可以设置为:

代码语言:javascript
复制
{title}的网址是{myurl}

如果title对应的元素选择器提取的内容为“WebMonitor真棒”,myurl对应的元素选择器提取的内容为“https://www.logicjake.xyz/WebMonitor”,则得到的消息内容为“WebMonitor真棒的网址是https://www.logicjake.xyz/WebMonitor”。

是否选择无头浏览器

如果源网页没有异步加载,可以不使用无头浏览器获取网页

代码语言:javascript
复制
建议先选择不使用,假如提交时提示获取不到文本信息,再使用无头浏览器尝试

正则表达式

如果获取到的文本信息有冗余,可以采用正则进一步筛选,如 价格:1390使用正则([1-9]\d*)提取到纯数字1390

监控规则

默认不填则文本发生变化就发通知,多规则请以’;’分开。存在规则的情况下,如果文本发生变化,从前往后检查规则,若符合其中一项规则就发通知。 规则格式:-规则 参数 支持以下规则:

-without

如:文本发生变化且文本内容不包含上架

代码语言:javascript
复制
-without 上架
-contain

如:文本发生变化且文本内容包含上架

代码语言:javascript
复制
-contain 上架
-increase

如:文本发生变化且相较于旧值,数值增长超过3 如果文本内容不是纯数字,请用正则提取出纯数字,否则将会报错

代码语言:javascript
复制
-increase 3
-decrease

如:文本发生变化且相较于旧值,数值减少超过3 如果文本内容不是纯数字,请用正则提取出纯数字,否则将会报错

代码语言:javascript
复制
-decrease 3
-equal

如:文本发生变化且等于某个值,数值等于3 如果文本内容不是纯数字,请用正则提取出纯数字,否则将会报错

代码语言:javascript
复制
-equal 3
-less

如:文本发生变化且小于某个值,数值小于3 如果文本内容不是纯数字,请用正则提取出纯数字,否则将会报错

代码语言:javascript
复制
-less 3
-more

如:文本发生变化且大于某个值,数值大于3 如果文本内容不是纯数字,请用正则提取出纯数字,否则将会报错

代码语言:javascript
复制
-more 3
自定义请求头

可以自定义请求时的请求头,主要用于设置Cookie,获取需要登录才能查看的页面,格式为字典,如 {'Cookie':'自定义cookie值'}

添加RSS监控任务

可以在 任务管理 > RSS监控任务管理 添加新RSS监控任务

任务状态查看

可以在任务状态栏目下查看所有任务,包括任务状态(run or stop),上次运行时间,上次运行结果,运行结果包括三类:

  • 监测到变化,最新值:{最新值}
  • 成功执行但未监测到变化
  • 出错显示异常信息

可以通过修改任务状态,暂停或重启任务

数据导入导出

WARNING: 网页监控任务和RSS监控任务的通知方式是通过外键与通知方式表连接,在数据表发生变化的情况下,外键id可能失效或无法和导出时保持一致,建议每次导入任务数据后检查通知方式是否正常。

实例

一般都是用来监控价格变化,但暂时没有什么想买的东西,所以就监控下每天发布的新片子吧

打开网址 https://www.bd2020.com/movies/index.htm,按 F12 调出开发者工具

① 按左上角的小箭头(Ctrl+Shift+C)开启选择模式 ② 选定区域后右键高亮的代码 ③ Copy –> Copy XPath

在 任务管理 –> 网页监控管理 添加新任务

  • 任务名称:随便
  • 监控网址:填写监控网址
  • 元素选择器类型:选择 Xpath
  • 元素选择器:粘贴上一步复制的内容
  • 通知方式:同时添加了 WxPusher 和 Alertover
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 功能
  • 部署
    • 手动部署
      • 安装
        • Docker 部署
          • 安装
      • 预览
      • 使用
        • 设置通知方式
          • 设置系统邮箱
          • 设置 Pushover Application
          • 设置 Slack
          • 设置 Telegram Bot
          • 设置自定义GET/POST通知
        • 添加网页监控任务
          • 选择器
          • xpath
          • css selector
          • JsonPath
        • 消息体模板
          • 是否选择无头浏览器
            • 正则表达式
              • 监控规则
                • -without
                • -contain
                • -increase
                • -decrease
                • -equal
                • -less
                • -more
                • 自定义请求头
              • 添加RSS监控任务
                • 任务状态查看
                  • 数据导入导出
                  • 实例
                  相关产品与服务
                  容器服务
                  腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档