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

使用Python检测网站更新出现误报问题求助

问题分析与修复方案

你的代码逻辑存在几个关键问题,导致明明网站没更新却一直提示变化:

核心问题

  • 循环内每次都会重新给current赋值为最新的哈希值,然后立刻等待30秒再获取newHash——这相当于拿刚获取的内容和30秒后的内容对比,初始的基准值完全没用到,逻辑颠倒了。
  • 目标网站可能返回包含动态内容的响应(比如实时时间戳、会话Cookie、随机加载的非核心元素),这些内容会改变哈希值,但不属于你要检测的"更新"。

修复后的代码

import time
import hashlib
from urllib.request import urlopen, Request

# 初始化请求头,模拟浏览器访问,减少动态内容干扰
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
url = Request('https://www.canada.ca/en/immigration-refugees-citizenship/services/immigrate-canada/express-entry/submit-profile/rounds-invitations.html', headers=headers)

# 第一次获取基准哈希值
res = urlopen(url).read()
current_hash = hashlib.sha224(res).hexdigest()
print("检测已启动,等待首次对比...")

while True:
    try:
        time.sleep(30)  # 先等待,再获取新内容
        res_new = urlopen(url).read()
        new_hash = hashlib.sha224(res_new).hexdigest()
        
        if new_hash == current_hash:
            print("无更新")
        else:
            print("网站已更新!")
            current_hash = new_hash  # 更新基准值,下次对比用最新的
        
    except Exception as e:
        print(f"发生错误: {str(e)}")

额外优化建议

  • 添加User-Agent请求头:模拟浏览器访问,避免服务器返回针对爬虫的特殊动态内容。
  • 捕获更通用的Exception:原代码只捕获AttributeError,无法处理网络错误等常见问题。
  • 逻辑调整:先等待,再获取新内容,确保基准值是上一次的结果,而非刚获取的内容。
  • 如果仍存在哈希值频繁变化的情况,可以考虑提取页面核心内容(比如只抓取邀请轮次的表格文本)再计算哈希,忽略无关的动态元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:01:16