监控网页内容变化:基于服务器端的自动化轮询与告警实践

落伟酱_7226

落伟酱_7226

2026-03-14

977人浏览

原创

监控网页内容变化:基于服务器端的自动化轮询与告警实践

本文介绍如何在无官方 api 的前提下,通过服务端定时抓取、解析与比对网页内容,实现对动态更新数据(如股票价格)的持续监控与阈值告警,适用于初学者快速搭建轻量级监控系统。

本文介绍如何在无官方 api 的前提下,通过服务端定时抓取、解析与比对网页内容,实现对动态更新数据(如股票价格)的持续监控与阈值告警,适用于初学者快速搭建轻量级监控系统。

在实际运维与数据采集场景中,常遇到目标网站仅提供前端渲染页面、不开放结构化 API 的情况(例如部分财经资讯站实时显示印度股市行情)。此时,若需在服务端自动监测关键字段(如某只股票最新价)是否突破预设阈值,并及时通知用户,可采用「服务端网页监控」方案——即绕过客户端 JavaScript 渲染逻辑,直接由服务器周期性获取 HTML、提取目标数据、执行条件判断并触发动作。

该方案核心由三部分组成:稳定的数据获取 → 准确的内容提取 → 可靠的状态决策与响应。以下以 Linux 服务器环境为例,使用 Python(兼顾可读性与生态成熟度)配合 requests + BeautifulSoup 实现,辅以 cron 定时调度,全程无需浏览器或前端运行环境。

✅ 基础实现步骤(Python 示例)

# monitor_stock.py
import requests
from bs4 import BeautifulSoup
import time

# 配置项(请替换为真实目标 URL 和选择器)
TARGET_URL = "https://example-stock-site.in/live/NIFTY50"
PRICE_SELECTOR = "#live-price"  # CSS 选择器,定位价格元素(需根据实际网页审查确定)
ALERT_THRESHOLD = 22500.0       # 触发告警的价格阈值
LOG_FILE = "/var/log/stock_monitor.log"

def get_current_price():
    try:
        headers = {
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36"
        }
        resp = requests.get(TARGET_URL, headers=headers, timeout=10)
        resp.raise_for_status()
        soup = BeautifulSoup(resp.text, "html.parser")
        price_elem = soup.select_one(PRICE_SELECTOR)
        if not price_elem:
            raise ValueError("Price element not found")
        raw_text = price_elem.get_text(strip=True).replace(",", "")
        return float(raw_text)
    except Exception as e:
        with open(LOG_FILE, "a") as f:
            f.write(f"[{time.ctime()}] ERROR: {e}\n")
        return None

def check_and_alert():
    current = get_current_price()
    if current is None:
        return
    if current > ALERT_THRESHOLD:
        # 此处可扩展:发送邮件、Webhook、写入数据库等
        print(f"? ALERT: NIFTY50 price {current} > threshold {ALERT_THRESHOLD}")
        # 示例:调用系统命令发送邮件(需提前配置 mailutils)
        # os.system(f'echo "Price exceeded!" | mail -s "Stock Alert" admin@example.com')

if __name__ == "__main__":
    check_and_alert()

? 关键提示:选择器调试
使用浏览器开发者工具(F12 → Elements → 右键元素 → Copy → Copy selector)获取稳定、唯一的 CSS 选择器;避免依赖动态 ID 或内联样式类。若页面依赖 JavaScript 渲染(如 React/Vue),则需改用 Playwright 或 Selenium 启动无头浏览器(增加资源开销,非必需时不推荐)。

⚙️ 部署为服务端定时任务

将脚本加入系统级定时任务,确保后台持续运行:

# 编辑当前用户的 cron 表
crontab -e

# 添加一行(每 15 秒执行一次 — 注意:cron 最小粒度为 1 分钟;高频轮询建议用 systemd timer 或简单 while 循环)
# 每分钟执行一次:
* * * * * /usr/bin/python3 /opt/monitor/monitor_stock.py >> /var/log/stock_monitor.log 2>&1

# 或使用更灵活的循环守护(推荐用于秒级监控):
# 创建 /opt/monitor/run_monitor.sh:
#!/bin/bash
while true; do
  python3 /opt/monitor/monitor_stock.py
  sleep 15
done
# 然后用 systemd 托管(略去 unit 文件细节,确保开机自启与日志管理)

⚠️ 注意事项与最佳实践

  • 遵守 robots.txt 与网站条款:检查目标站点 robots.txt 是否允许爬取,避免高频请求导致 IP 被封;建议设置合理间隔(≥10–30 秒),添加随机延迟。
  • 异常健壮性:网络超时、HTML 结构变更、空值/格式异常(如“—”、“N/A”)必须捕获处理,避免脚本中断。
  • 状态持久化(进阶):单纯轮询无法感知“变化”,建议记录上一次有效值到文件或 Redis,仅当新值 ≠ 旧值且满足阈值时才告警,减少误报。
  • 安全加固:脚本运行在独立低权限用户下;敏感配置(如 Webhook 地址)应从环境变量或加密配置文件读取,勿硬编码。
  • 可观测性:输出结构化日志(含时间戳、状态码、价格、是否告警),便于后续接入 ELK 或 Prometheus+Grafana。

掌握此模式后,你不仅能监控股价,还可迁移至航班状态、汇率、竞品价格、政策公告等任意公开网页数据源——本质是构建一套自主可控的「轻量级网络数据哨兵」。起步无需复杂框架,重在理解数据流闭环:拉取 → 解析 → 判断 → 响应 → 日志 → 优化。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

12884

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

7381

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2255

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

4668

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

5374

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

4231

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

6137

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

4822

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

12582

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.3万人学习