讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

AniShort
AniShort

AI短剧协同制作平台

updream

一键生成高质量推广成片

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

落伟酱_7226

落伟酱_7226

发布时间:2026-03-14 09:38:01

|

977人浏览过

|

来源于php中文网

原创

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

本文介绍如何在无官方 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。

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

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

热门AI工具

更多
超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

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

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

12884

2023.09.01

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

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

7381

2023.10.11

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

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

2255

2023.10.11

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

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

4668

2023.10.23

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

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

5374

2023.10.23

html怎么上传
html怎么上传

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

4231

2023.11.03

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

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

6137

2023.11.09

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

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

4822

2023.11.13

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

40

2026.11.12

热门下载

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

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn