python监测网页变化_Python利用Last-Modified实现监控网页变化
工作需要实现监控一个网页的变化,一旦远程某个网页的代码或者内容更新了,马上发出提示。之前考虑过,抓取网页,保存网页,抓取-比对的方案,但是这样做不但访问的频率会受到限制,而且效率也很低。无法满足高效精准的要求。其实,根据浏览器的缓存原理,利用Last-Modified属性,可以做到高效且精准的监控。
Last-Modified属性技术原理:
在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样:
Last-Modified: Fri, 12 May 2006 18:53:33 GMT
客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过:
If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT
如果服务器端的资源没有变化,则自动返回 HTTP 304 (Not Changed.)状态码,内容为空,这样就节省了传输数据量。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。
利用此属性,基本可以实现监控网页变化,在两秒钟之内如果网页发生变化,出现提示,代码如下:
# coding: UTF-8
# filename: moniter.py
import time
import requests
url = 'http://www.abc.com/test.html'
last_modified = ''
def get_page():
global last_modified
headers = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3',
'Connection':'keep-alive'
}
if last_modified:
headers['If-Modified-Since'] = last_modified
res = requests.get(url, headers = headers)
if res.status_code == 200:
if last_modified and last_modified is not res.headers['Last-Modified']:
print 'page has changed\r',
return False
last_modified = res.headers['Last-Modified']
elif res.status_code == 304:
print 'normal\r',
return True
if __name__ == '__main__':
while 1:
result = get_page()
if result:
time.sleep(2)
else:
break
未完,待续...
python监测网页变化_Python利用Last-Modified实现监控网页变化相关推荐
- python爬取网页停止_Python爬虫之爬取静态网页
所谓网络爬虫,通俗的讲,就是通过向我们需要的URL发出http请求,获取该URL对应的http报文主体内容,之后提取该报文主体中我们所需要的信息.所以,想要学习python爬虫,需要具备一些http的 ...
- python绘制渐变图_Python利用imshow制作自定义渐变填充柱状图(colorbar)
目的 在各种各样的理论计算中,常常需要绘制各种填充图,绘制完后需要加渐变填充的colorbar.可是有些软件如VMD,colorbar渲染后颜色分布有些失真,不能较准确的表达各颜色对应的数值.用ps中 ...
- python单词词频字典_python利用多种方式来统计词频(单词个数)
python的思维就是让我们用尽可能少的代码来解决问题.对于词频的统计,就代码层面而言,实现的方式也是有很多种的.之所以单独谈到统计词频这个问题,是因为它在统计和数据挖掘方面经常会用到,尤其是处理分类 ...
- python rsa 公钥解密_python利用rsa库做公钥解密的方法教程
前言 对于RSA的解密,即密文的数字的 D 次方求mod N 即可,即密文和自己做 D 次乘法,再对结果除以 N 求余数即可得到明文.D 和 N 的组合就是私钥(private key). 算法的加密 ...
- python numpy 子数组_Python利用Numpy数组进行数据处理(一)
Numpy数组使你可以将许多种数据处理任务表达为简洁的数组表达式(否则需要编写循环).用数组表达式代替循环的做法,通常被称为矢量化. np.meshgrid函数接受两个一维数组,并产生两个二维矩阵(对 ...
- python概率随机抽奖_Python利用带权重随机数解决抽奖和游戏爆装备
关于带权随机数 为了帮助理解,先来看三类随机问题的对比: 1.已有n条记录,从中选取m条记录,选取出来的记录前后顺序不管. 实现思路:按行遍历所有记录,约隔n/m条取一个数据即可 2.在1类情况下,还 ...
- python的api库_python 利用toapi库自动生成api
在学习做接口测试自动化的时候,我们往往会自己动手写一些简单的API,比如写一个简单的TODO API之类. 不过自己写API的时候经常需要造一些假数据,以及处理分页逻辑,开始的时候还觉得比较有意思,但 ...
- python修改mac地址_python利用_winreg模块制作MAC地址修改工具
通过百度搜索知道,xp下修改MAC地址的方法主要有两个,一种是通过配置本地链接属性来实现,这种方法不适合用程序来完成,另一种是通过修改注册表来完成,本程序主要是利用了这种方法. 具体方法:Window ...
- python 三维图 背景_Python利用matplotlib生成图片背景及图例透明的效果
前言 最近工作中遇到一个需求,在使用matplotlib生成图片,想要背景透明,而且图例部分也显示透明效果,通过查找相关资料找到了大概的设置方法,特此记录,方便自己或者有需要的朋友们参考学习. 示例代 ...
- 如何使用python批量压缩图片_python利用Guetzli批量压缩图片
Google 又开源了,这次开源了一款图像算法工具 Guetzli.Guetzli,在瑞士德语中是"cookie(曲奇)"的意思,是一个针对数码图像和网页图像的 JPEG 编码器, ...
最新文章
- 2021年就业力排名TOP10的英国大学
- RTEMS文件系统(4):系统调用开发信息(上)
- caffe使用过程中遇到的问题和解决办法
- python顺序表的实现_python中的顺序表
- ansible常用ad hoc操作
- java开发者最常去的20个英文网站
- matlab2016a的光伏阵列,DAMPPT 光伏电池阵列输出功率受光照强度和温度变化的影响,因此最大 点跟踪( )技 matlab 272万源代码下载- www.pudn.com...
- 【C#】通过正则表达式对TextBox进行校验
- 安卓导航车机root方法_不破不立,拥抱安卓的全新奥迪A4L到底有多好用?
- java中常量池存的是什么_Java中常量池是什么?Java常量池的介绍
- eth的geth钱包安装
- Guava Splitter,Splitter与Java split的对比
- 麦克劳林公式求sin(x)
- 高精度数字温度传感器为基于RTD和医疗应用的设计带来简便性
- Final Cut Pro资源库占用内存太大如何释放磁盘空间?
- IPFS周报-95:你是如何探索IPFS生态的?官方正在调查
- 基于最大熵Maxent-ArcGis地理分布预测教程
- 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
- 从零开始学Python人脸识别技术,人工智能不过如此!
- linux飞信机器人,安装fetion飞信机器人