需求:编写⼀个脚本定期检查⽹⻚内容的变化(如价格变化、新闻更新等),并通过电⼦邮件或其他⽅式通知⽤⼾,了解定时任务和通知实现机制。
分析:创建⼀个⽹⻚变化监测器涉及到⼏个关键步骤:⾸先,定期抓取⽬标⽹⻚的内容;然后,⽐较最新抓取的内容与之前保存的内容以检测变化;最后,如果检测到变化,通过电⼦邮件或其他⽅式通知⽤⼾。
在这个⽰例中,将使⽤Python的 requests 库来抓取⽹⻚, hashlib 来⽐较内容的变化,并使⽤schedule 库来定时执⾏任务。为了简化,将演⽰如何打印变化通知到控制台,⽽不是发送电⼦邮件。
确保已安装 requests 和 schedule 库。如果未安装,请通过以下命令进⾏安装:
pip install requests schedule
示例:
import requests
import hashlib
import schedule
import time
# ⽬标⽹⻚URL
url = 'http://example.com'
# 存储上⼀次⽹⻚内容的哈希值
last_hash = ''
def fetch_content(url):
"""获取⽹⻚内容"""
response = requests.get(url)
return response.text
def check_for_changes():
"""检查⽹⻚内容是否发⽣变化,并更新last_hash"""
global last_hash
# 获取当前内容并计算哈希值
current_content = fetch_content(url)
current_hash = hashlib.sha256(current_content.encode('utf-8')).hexdigest()
if current_hash != last_hash:
print("⽹⻚内容发⽣了变化!")
# 更新last_hash为当前内容的哈希值
last_hash = current_hash
else:
print("⽹⻚内容未发⽣变化。")
# 定期执⾏检查
schedule.every(10).seconds.do(check_for_changes)
while True:
schedule.run_pending()
time.sleep(1)
在这个脚本中:
• fetch_content 函数⽤于获取指定URL的⽹⻚内容。
• check_for_changes 函数检查当前⽹⻚内容的哈希值是否与之前保存的哈希值相同。如果不同,说明⽹⻚内容发⽣了变化。
• 使⽤ schedule 库定期执⾏ check_for_changes 函数,这⾥设置为每10秒检查⼀次。可以根据需要调整检查频率。
• 如果检测到⽹⻚内容变化,脚本将打印⼀条消息。在实际应⽤中,可以在这⾥添加发送电⼦邮件或其他通知的代码