如何判断一个网页是否更新

最近的软工项目中,我需要去判断一个网页是否更新,下面是我已知道的并已经代码实现一些方法的总结:

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算法

局部敏感哈希

如何判断一个网页是否更新相关推荐

  1. 如何判断一个网页是不是一个Blog的首页?

    如何判断一个网页是不是一个Blog的首页? 最近碰到一个问题,如何从一组链接中,判断链接是不是Blog的首页链接? 先从 Blog 存放的地点说起: 1.由BSP托管的Blog,一般采用开源或者BSP ...

  2. java 判断页面刷新_如何判断一个网页是刷新还是关闭的方法

    页面加载时只执行onload 页面关闭时只执行onunload 页面刷新时先执行onbeforeunload,然后onunload,最后onload.这样我们可以在onbeforeunload中加一个 ...

  3. 判断一个网页是在哪里打开的( ios,Android,微信)

    var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = u.indexOf('Android') > - ...

  4. 如何判断一个网页是不是动态页面

    如果你需要爬取的数据是放在js里面的,那么就是动态,需要用selenium等工具抓取. 跑下面的代码,就会把网页上所有元素都打印出来.ctrl+F搜索一下,如果要找的元素在一个js object里面, ...

  5. 如何使用selenium webdriver来判断一个网页加载完毕

    想实现一个加载网页计时的功能,如何用selenium webdriver实现判断一个网页加载完毕? ================================================== ...

  6. 如何判断网页是否更新??

    转载于 https://blog.csdn.net/huwei2003/article/details/70139062 篇幅较长,未复制图片. HTTP 304状态码的详细讲解 304状态码或许不应 ...

  7. 如何设计一个网页爬虫

    作为长期深耕在爬虫行业的程序猿来说,对于设计一个网页爬虫想必很简单,下面就是一些有关网页爬虫设计的一些思路,可以过来看一看. 第一步:简述用例与约束条件 把所有需要的东西聚集在一起,审视问题.不停的提 ...

  8. html送女朋友的网页,做一个网页送给心动女孩子生日礼物(表白也合适)

    如何做一个网页送给女朋友做生日礼物 本文里面涉及到python,HTML ,css,JavaScript的知识,是基于python的flask框架做的一个小型网站,里面可以实现跳转功能,怎么配置fla ...

  9. 如何做一个网页送给女朋友做生日礼物

    如何做一个网页送给女朋友做生日礼物 本文里面涉及到python,HTML ,css,JavaScript的知识,是基于python的flask框架做的一个小型网站,里面可以实现跳转功能,怎么配置fla ...

  10. 如何做一个网页送给女朋友做生日礼物!感动到哭!

    如何做一个网页送给女朋友做生日礼物 本文里面涉及到python,HTML ,css,JavaScript的知识,是基于python的flask框架做的一个小型网站,里面可以实现跳转功能,怎么配置fla ...

最新文章

  1. oracle创建表分区表,oracle创建分区表
  2. 你的眼睛一天内经历几万次“失明”,只是为了让你看清世界
  3. c# 使用 itextsharp 实现生成Pdf报表
  4. Zabbix学习之路(一)之Zabbix安装
  5. 算法导论水壶问题(第三版第八章思考题8-4)
  6. stm32时钟树_先学STM8,还是学STM32?
  7. select 存储过程 mysql_MySQL存储过程无法使用SELECT(基本问题)
  8. mongodb 远程连接
  9. 剑指Offer面试题:28.连续子数组的最大和
  10. 学车日记(4)--小路考Pass!
  11. Maven -- dependency详解
  12. Google Colab 挂载 Google Drive
  13. 杨森翔人日诗词;人日书法
  14. html如何制作圣诞树,分享用HTML5来实现一个3D逼真的圣诞树
  15. cisco设备与基本操作
  16. 【情报百科】如何使用FOCA进行OSINT文档元数据分析?
  17. vue的两个核心是什么
  18. 约瑟夫问题-输出最后的编号
  19. JWT的学习和JJWT的使用
  20. 29个省市,364个门店,新飘柔营销背后,是一场80天的AR狂欢

热门文章

  1. 虚拟化:侧信道攻击案例
  2. CRC校验算法及C++程序实现
  3. Sakai Demo搭建及遇到的问题汇总
  4. winhex 使用教程
  5. ☆汇总☆电力电子技术simulink仿真电路分析
  6. VGG-16网络结构解析
  7. matlab调和均值滤波_matlab-均值滤波
  8. Java输入输出流体系
  9. 非学习的点云配准方法汇总
  10. 基于librtmp的推流实现