爬虫:如何判断一个网页已经更新?

一个网页是否更新,是很多爬虫开发人员都会碰到的问题,如果只是一次性抓取来使用,那这个问题无关紧要,抓一遍完事,但是工程中的爬虫通常需要长期运行,如果内容更新,需要及时抓取。

思路1:定期抓取

这是一个常见的获取更新内容的思路,这种方式无状态,傻瓜式的,我并不需要知道网页到底更新哪些内容,我只要每次拿网页的内容去数据库里去重插入即可。
这种思路问题就是浪费资源。无论对方更新没有,都得去抓取一遍。

思路2:RSS订阅

RSS(简易信息聚合),一种基于XML格式的内容包装和投递协议,可以用于同步网页内容,目前适用于博客,新闻等。
这种思路问题是并不是所有网站都提供RSS源的,虽说有万能的rsshub,但是rsshub也是需要开发人员自己去维护的。

思路3:If-Modified-Since 状态码

If-Modified-Since: 允许在对应的内容未被修改的情况下返回304未修改( 304 Not Modified )维基百科
示例:If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT

If-Modified-Since可用于web缓存,它是HTTP header的一个部分,若HTTP响应有一个Last-Modified头,缓存可以使用If-Modified-Since头来发出一个条件请求,来查看它是否已经改变。

这种思路操作如下:
1 第一次先请求某个网页,抓取到本地,假设文件名为 a.html。这时文件系统有个文件的修改时间。

2 第二次访问网页,如果发现本地已经有了 a.html,则向服务器发送一个 If-Modified-Since 的请求。 把 a.html 的修改时间写到请求里。

3 如果网页更新了,服务器会返回一个 200 的应答,这时就重新抓取网页,更新本地文件。

4 如果网页没有更新,服务器会返回一个304的应答。这时就不需要更新文件了。

这种思路的问题是这种方法适用于静态网页的更新,对于动态从服务器取数据的动态网页不适用。

思路4:网页内容相似度比较

这里的网页内容指的是网页的正文内容,不包括访问量等非关键区域文本。
网上提供的做法有网页指纹+海明距离的算法,两次抓取网页海明距离越大,变化越大,海明距离的大小需要根据实际条件调整。

总结

网页判断更细没有固定套路,需要根据项目和网站情况,选择合适的方法进行判断。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,842评论 1 45
  • 浏览器对于请求资源, 流程如图所示: 可以看到浏览器的缓存机制分为两个部分: 1、当前缓存是否过期? 2、服务器中...
    zhoulujun阅读 1,289评论 0 3
  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 2,935评论 0 6
  • 网络特有的延迟以及数据传输的成本,制约互联网快速获取Web资源。为此,HTTP协议引入缓存以空间换时间,使浏览器缓...
    大头8086阅读 3,204评论 2 12
  • 原文链接:http://tech110.blog.51cto.com/438717/549764 Http的Cac...
    五鲜谱阅读 893评论 0 2

友情链接更多精彩内容