使用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
相关产品推荐
相关产品推荐

