多网页每日文本变更检测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()
脚本使用说明
- 配置URL:在
MONITOR_URLS列表里添加所有要监控的页面,格式跟示例一致 - 运行方式:直接用Python运行脚本,第一次运行会生成基准哈希,之后每次运行都会对比前一次的记录
- 错误处理:如果某个页面打不开,脚本会打印错误,但不会中断其他页面的检测
- 结果查看:脚本直接在控制台输出变更的URL,你可以手动点击查看改动
三、设置每日自动运行
因为笔记本夜间关机,需要让脚本每天自动运行:
Windows 操作
- 打开「任务计划程序」→ 点击「创建基本任务」
- 输入任务名称(比如「条款页面监控」),设置触发时间为每天开机后或你指定的时间
- 操作选择「启动程序」,程序路径选你的Python安装路径(比如
C:\Python311\python.exe),添加参数选脚本的完整路径(比如D:\scripts\monitor_terms.py)
Mac/Linux 操作
- 打开终端,输入
crontab -e - 添加一行定时命令(比如每天9点运行):
(注意替换成你的Python路径和脚本路径)0 9 * * * /usr/bin/python3 /Users/你的用户名/scripts/monitor_terms.py
四、零代码替代方案(适合完全不想碰代码的情况)
如果你觉得写代码麻烦,可以用本地文件对比工具:
- 每天手动把所有监控页面保存为HTML文件到指定文件夹
- 用
WinMerge(Windows)或Beyond Compare(跨平台)对比今天和昨天的文件,工具会自动标记差异
但这个方法适合URL较少的情况,60+个页面的话还是脚本更高效
内容的提问来源于stack exchange,提问作者Edward Chaput
相关产品推荐
相关产品推荐

