You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多网页每日文本变更检测Python脚本需求及问题咨询

多页面每日变更检测解决方案

问题梳理

你需要监控60+条款页面的变更,脚本每日在笔记本运行(夜间关机),现有单页脚本存在三个问题:

  • 替换URL后出现「未知URL类型」错误
  • 仅支持单页检测,无法批量处理
  • 无每日基准存储功能,无法适配每日运行的场景

一、先解决「未知URL类型」错误

这个错误的原因很简单:URL必须包含http://或https://前缀。urllib库无法识别不带协议的域名,比如把www.facebook.com/xxx改成https://www.facebook.com/xxx即可解决。


二、修改后的多站点每日检测脚本

针对你的需求,我把原脚本改成了每日运行一次、批量检测多URL、自动存储基准哈希的版本,新手可以直接用:

import hashlib
import json
from urllib.request import urlopen, Request
from datetime import date

# -------------------------- 配置区(新手只需要改这里) --------------------------
# 把所有要监控的URL放在这个列表里,每个URL加引号,逗号分隔
MONITOR_URLS = [
    "https://www.facebook.com/business/help/105521246161366?id=1205376682838531",  # Meta广告标准示例
    "https://example.com/your-terms-page-2",
    "https://example.com/your-terms-page-3",
    # 继续添加剩下的URL...
]

# 存储历史哈希的文件,会自动生成,不用手动创建
HASH_STORAGE_FILE = "page_change_history.json"
# -----------------------------------------------------------------------------

def get_page_hash(url):
    """获取页面内容的哈希值,用于对比是否变更"""
    try:
        # 模拟浏览器请求,避免被网站反爬拦截
        request_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'}
        response = urlopen(Request(url, headers=request_headers)).read()
        return hashlib.sha224(response).hexdigest()
    except Exception as e:
        print(f"⚠️  无法获取页面: {url},错误信息: {str(e)}")
        return None

def load_saved_hashes():
    """加载之前保存的页面哈希记录"""
    try:
        with open(HASH_STORAGE_FILE, "r", encoding="utf-8") as f:
            return json.load(f)
    except FileNotFoundError:
        # 首次运行时文件不存在,返回空字典
        return {}

def save_current_hashes(hashes_dict):
    """保存当前页面的哈希,作为下次检测的基准"""
    with open(HASH_STORAGE_FILE, "w", encoding="utf-8") as f:
        json.dump(hashes_dict, f, indent=2)

def main():
    today_date = str(date.today())
    saved_hashes = load_saved_hashes()
    current_page_hashes = {}

    print(f"🔍 开始检测 {len(MONITOR_URLS)} 个页面...")
    # 批量获取所有页面的当前哈希
    for url in MONITOR_URLS:
        hash_value = get_page_hash(url)
        if hash_value:
            current_page_hashes[url] = hash_value

    # 对比历史哈希,找出变更的页面
    if saved_hashes:
        print("\n✅ 检测到变更的页面:")
        has_changes = False
        for url, current_hash in current_page_hashes.items():
            if url in saved_hashes and saved_hashes[url] != current_hash:
                print(f"- {url}")
                has_changes = True
        if not has_changes:
            print("- 无页面变更")
    else:
        print("\n📝 首次运行,已保存当前页面哈希作为基准")

    # 保存今天的哈希,供下次检测对比
    save_current_hashes(current_page_hashes)
    print("\n检测完成,结果已保存到文件")

if __name__ == "__main__":
    main()

脚本使用说明

  1. 配置URL:在MONITOR_URLS列表里添加所有要监控的页面,格式跟示例一致
  2. 运行方式:直接用Python运行脚本,第一次运行会生成基准哈希,之后每次运行都会对比前一次的记录
  3. 错误处理:如果某个页面打不开,脚本会打印错误,但不会中断其他页面的检测
  4. 结果查看:脚本直接在控制台输出变更的URL,你可以手动点击查看改动

三、设置每日自动运行

因为笔记本夜间关机,需要让脚本每天自动运行:

Windows 操作

  1. 打开「任务计划程序」→ 点击「创建基本任务」
  2. 输入任务名称(比如「条款页面监控」),设置触发时间为每天开机后或你指定的时间
  3. 操作选择「启动程序」,程序路径选你的Python安装路径(比如C:\Python311\python.exe),添加参数选脚本的完整路径(比如D:\scripts\monitor_terms.py)

Mac/Linux 操作

  1. 打开终端,输入crontab -e
  2. 添加一行定时命令(比如每天9点运行):
    0 9 * * * /usr/bin/python3 /Users/你的用户名/scripts/monitor_terms.py
    
    (注意替换成你的Python路径和脚本路径)

四、零代码替代方案(适合完全不想碰代码的情况)

如果你觉得写代码麻烦,可以用本地文件对比工具:

  1. 每天手动把所有监控页面保存为HTML文件到指定文件夹
  2. 用WinMerge(Windows)或Beyond Compare(跨平台)对比今天和昨天的文件,工具会自动标记差异
    但这个方法适合URL较少的情况,60+个页面的话还是脚本更高效

内容的提问来源于stack exchange,提问作者Edward Chaput

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:54:58