如何判断一个网页是否更新
如何判断一个网页是否更新
最近的软工项目中,我需要去判断一个网页是否更新,下面是我已知道的并已经代码实现一些方法的总结:
1. 根据http协议头
在爬网页时,我们首先会向服务器发送head请求,随后在返回的httpheader资料中,我们可以找到Last-Modifed一栏, 即网页最后的修改时间。但是这个判断主要在于静态页面,在动态页面中Last-Modifed只是服务器最后发送Response的时间,所以我们将其作为网页是否更新的一个参考值,设置权重。
URL u = new URL("https://www.zhihu.com/question/51690276/answer/131152090");HttpURLConnection http = (HttpURLConnection) u.openConnection();http.setRequestMethod("HEAD");Date lastModify =new Date(http.getLastModified());System.out.println("最后更新时间:"+lastModify);
2. 通过hash数字签名
在下载完网页后我们可以把服务器返回的数据流先放在一个缓冲区里,再利用一些算法生成hash值,然后每次查看网页时先生成hash值与第一次的对比,根据差异度可以判断更新比例。而通常按照汉明距离来计算,三个以内即可判断未更新。在这一次的项目中,我使用的是simhash算法来实现生成网页hash数字签名,参考的博客为:
局部敏感哈希算法,而通过java正式实现可使用的版本,在我的下一篇博客中有,欢迎大家去看:
通常来说,simhash算法与普通的hash码的区别在:普通hash算法对改动过于敏感,并且针对大文本,算法耗时长,准确度还不高。
而simhash的实现步骤归于以下四步:
(1)将文章转换为一组加权的特征值构成的向量,即对文章进行分词,而如何去分,就十分考验大家的水平 了,这次的实现中,我对与英文是按照空格和关联词分的,而中文由于不太懂就直接按照逗句号了。
(2)计算hash码,通过hash算法将每个词变成hash值
(3)加权:对hash值根据词语的权重换算成加权数串,1位正数,0位负,例如10011,权重为4,则变为:4 -4 4 -4 4
(4)合并:对加权后的数组串,按照每一位进行计算,比如两个字符串 10011 00110 一个权重为4,一个权重 为5,则为4-5 -4-5 -4+5 4+5 4-5 合并为:-1 -9 1 9 -1,然后转换回hash码,正数为1,负数为0,即变为 00110
然后我们计算两个文本的simhash值的汉明距离,其实就是看有多少位的差别,一般少于三位代表两个网页为差不多的。
在这个算法中,如果你直接使用的话,或许会发现simhash对某些改动并不敏感,而如何在两种方法之间权衡来
更好的判断网页的更新,就需要根据实际情况进行权重选择,在这里就不详细描述了。
相关资料参考:基于局部敏感哈希的协同过滤算法之simHash算法
局部敏感哈希
如何判断一个网页是否更新相关推荐
- 如何判断一个网页是不是一个Blog的首页?
如何判断一个网页是不是一个Blog的首页? 最近碰到一个问题,如何从一组链接中,判断链接是不是Blog的首页链接? 先从 Blog 存放的地点说起: 1.由BSP托管的Blog,一般采用开源或者BSP ...
- java 判断页面刷新_如何判断一个网页是刷新还是关闭的方法
页面加载时只执行onload 页面关闭时只执行onunload 页面刷新时先执行onbeforeunload,然后onunload,最后onload.这样我们可以在onbeforeunload中加一个 ...
- 判断一个网页是在哪里打开的( ios,Android,微信)
var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = u.indexOf('Android') > - ...
- 如何判断一个网页是不是动态页面
如果你需要爬取的数据是放在js里面的,那么就是动态,需要用selenium等工具抓取. 跑下面的代码,就会把网页上所有元素都打印出来.ctrl+F搜索一下,如果要找的元素在一个js object里面, ...
- 如何使用selenium webdriver来判断一个网页加载完毕
想实现一个加载网页计时的功能,如何用selenium webdriver实现判断一个网页加载完毕? ================================================== ...
- 如何判断网页是否更新??
转载于 https://blog.csdn.net/huwei2003/article/details/70139062 篇幅较长,未复制图片. HTTP 304状态码的详细讲解 304状态码或许不应 ...
- 如何设计一个网页爬虫
作为长期深耕在爬虫行业的程序猿来说,对于设计一个网页爬虫想必很简单,下面就是一些有关网页爬虫设计的一些思路,可以过来看一看. 第一步:简述用例与约束条件 把所有需要的东西聚集在一起,审视问题.不停的提 ...
- html送女朋友的网页,做一个网页送给心动女孩子生日礼物(表白也合适)
如何做一个网页送给女朋友做生日礼物 本文里面涉及到python,HTML ,css,JavaScript的知识,是基于python的flask框架做的一个小型网站,里面可以实现跳转功能,怎么配置fla ...
- 如何做一个网页送给女朋友做生日礼物
如何做一个网页送给女朋友做生日礼物 本文里面涉及到python,HTML ,css,JavaScript的知识,是基于python的flask框架做的一个小型网站,里面可以实现跳转功能,怎么配置fla ...
- 如何做一个网页送给女朋友做生日礼物!感动到哭!
如何做一个网页送给女朋友做生日礼物 本文里面涉及到python,HTML ,css,JavaScript的知识,是基于python的flask框架做的一个小型网站,里面可以实现跳转功能,怎么配置fla ...
最新文章
- ACCESS TOKEN
- table中head表头固定,body滚动
- gdiplus 水印_Delphi程序的应用GDI+制作水印效果图片
- #191 sea(动态规划)
- 蓝桥杯c语言a组省赛试题及答案,2016-蓝桥杯-省赛-C语言大学A组全部真题.doc
- 实现Chrome Devtools调试JavaScript V8引擎
- MySQL中时间函数NOW()和SYSDATE()的区别
- 常用的python模块及安装方法
- Python网络编程(2)-粘包现象及socketserver模块实现TCP并发
- atitit.按钮光标滑过高亮切换以及其他动态效果的实现css html js --attilax总结
- Android布局基础知识
- 脉冲神经网络 神经元模型-Izhikevich模型(3)
- SkipList A Probabilistic Alternative to Balanced Trees
- 掠食细菌—蛭弧菌B. bacteriovorus,可以对抗革兰氏阴性感染?
- 微信开发创建公众号或小程序菜单45064: no permission to use weapp in menu rid:XXXXXXX
- 软工网络15个人阅读作业2 201521123023 网络1511 戴建钊
- 维护计算机网络教室的常见问题及解决方案
- 计算机的显卡功能,电脑怎么看显卡参数 显卡有什么作用
- (六)类和对象(二)const
- 分析网易云歌曲评论分析加密的JS并且解密,并使用Python抓取歌曲评论
热门文章
- plecs matlab 联合仿真,基于Matlab和PLECS的电力电子仿真实验教学
- SAS入门 (二)--宏
- 为sakai配置单点登录
- 计算机公共基础课网络教学平台,“计算机基础”教学中网络教学平台应用研究.doc...
- BeyondDesk 桌面小工具集合/时钟日历黄历便签相框天气时间/托盘时钟 [开放代码]
- 移动机器人路径规划:人工势场法
- 渐变的alert_好看的alert样式或者弹窗样式
- CentOS 7.4 安装网易云音乐
- opensuse 安装网易云音乐(tumbleweed)(leap)
- 我的世界可以在服务器用修改器,我的世界TMI修改器使用教程