0

0

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

碧海醫心

碧海醫心

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

|

857人浏览过

|

来源于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 启动无头浏览器(增加资源开销,非必需时不推荐)。

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

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

Vondy
Vondy

下一代AI应用平台,汇集了一流的工具/应用程序

下载
# 编辑当前用户的 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工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1007

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

673

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

501

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

414

2024.04.07

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

408

2024.04.07

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

484

2024.04.07

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号