网站监控网页内容监测(Last-Modified属性技术原理及应用-的属性)
优采云 发布时间: 2022-03-08 16:16网站监控网页内容监测(Last-Modified属性技术原理及应用-的属性)
工作需要监控一个网页的变化。一旦远程网页的代码或内容更新,将立即发出提示。我考虑过爬取网页、保存网页、爬取比较的方案,但这不仅会限制访问频率,而且效率非常低。不能满足高效率、高精度的要求。事实上,根据浏览器的缓存原理,可以使用 Last-Modified 属性进行高效准确的监控。
Last-Modified 属性技术原理:
当浏览器第一次请求一个URL时,服务器的返回状态会是200,内容就是你请求的资源,并且有一个Last-Modified属性来标记服务器上最后一次修改文件的时间. 格式类似于:
最后修改时间:格林威治标准时间 2006 年 5 月 12 日星期五 18:53:33
当客户端第二次请求这个 URL 时,根据 HTTP 协议的规定,浏览器会向服务器发送 If-Modified-Since 头,询问该时间之后文件是否被修改:
If-Modified-Since: 2006 年 5 月 12 日星期五 18:53:33 GMT
如果服务器端的资源没有变化,会自动返回HTTP 304(Not Changed.)状态码,内容为空,从而节省传输数据量。当服务器端代码更改或服务器重启时,重新发出资源,返回类似于第一次请求。这样可以保证资源不会重复发送给客户端,并且当服务器发生变化时,客户端可以获取到最新的资源。
使用这个属性,基本上可以监控网页的变化。如果网页在两秒内发生变化,会出现提示。代码如下:
# 编码:UTF-8
# 文件名:monitor.py
*敏*感*词*时间
导入请求
网址 = '#39;
最后修改=''
定义 get_page():
全局 last_modified
标题 = {
'接受':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'接受编码':'gzip,放气',
'接受语言':'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3',
'连接':'保持活动状态'
}
如果最后修改:
headers['If-Modified-Since'] = last_modified
res = requests.get(url, headers = headers)
如果 res.status_code == 200:
如果 last_modified 和 last_modified 不是 res.headers['Last-Modified']:
print '页面已更改\r',
返回假
last_modified = res.headers['Last-Modified']
elif res.status_code == 304:
打印“正常\r”,
返回真
如果 __name__ == '__main__':
而1:
结果 = get_page()
如果结果:
时间.sleep(2)
别的:
休息
未完待续,待续……