网站内容更新监控(HTTP状态码规定了304字段,你不能指望所有的网站都正确实现了)

优采云 发布时间: 2021-10-05 11:24

  网站内容更新监控(HTTP状态码规定了304字段,你不能指望所有的网站都正确实现了)

  HTTP状态码指定了304字段,在Chrome控制台中可以看到很多js css文件都有304状态码。这种方法的优点是节省资源;缺点是极其不可靠,因为不是所有的服务器都会返回304状态码,现在很多网站都是动态加载的单页应用。index.html 从未改变。知乎 一位同学描述了具体方法,我直接复制了。

  第一次请求一个网页,在本地抓取,假设文件名是a.html。这时候文件系统就有了文件修改时间。第二次访问网页时,如果在本地找到a.html,则向服务器发送If-Modified-Since请求。在请求中写入a.html的修改时间。如果网页有更新,服务器会返回200响应,然后重新抓取网页并更新本地文件。如果网页没有更新,服务器将返回 304 响应。此时不需要更新文件。

  这种方法的缺点与RSS相同。您不能期望所有 网站 都正确实现 HTTP。比较可靠,但有点麻烦,判断是基于网页的内容。

  2.基于网页内容的比较

  由于网页内容的纵向比较,这个想法难免是“有状态的”,需要一个数据库或类似的服务来存储历史网页。

  历史网页的对比也是一个难点。部分网页显示“访问”和“当前时间”的内容。这些东西的变化不应算作“网页更新”。监控页面的某个 xpath 更可靠,而不是整个页面。不靠谱的是利用各种判断条件做出“网页不更新”的花哨决定。例如:

  我还找到了“网页指纹+汉明距离”的算法。我看了一下这个算法,好像是判断大量网页中的两个网页是否是同一个东西。比如同一条新闻被两个网站转载,两个网站的html是完全不同的,但是新闻的内容和文字是完全一样的。用simhash计算距离,可以认为这两个网页在说同一个东西。(我不知道)。

  这方面有一些现成的监控服务,例如:

  网页战士页面监控分秒数据

  我也试着自己写一个。我计划使用 webhooks 发送通知并使用 Celery 以固定频率访问网页。然后用自己的想象力写一个决定来决定是否更新。项目进度在这里:(最后也可以编个坑)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线