php - 检查页面内容是否已更改的最佳方法?

标签 php python hash web-crawler

我有一个爬虫程序可以爬取数十万个页面并索引/解析页面内容,我正在努力的一件事是检查页面内容是否已更新,以一种有效的方式,无需抓取它并检查页面内容。

显然我可以加载整个页面,然后重新解析所有内容并将其与我存储在数据库中的内容进行比较。然而,这是非常低效的,并且会使用大量计算,从而导致高昂的托管费用。

我正在考虑比较散列值,问题是如果页面更改了单个字节或字符,散列值就会不同。因此,例如,如果页面在页面上显示当前日期,则每次哈希都会不同,并告诉我内容已更新。

那么……你会怎么做呢?你会看看 HTML 的 kb 大小吗?您会查看字符串长度并检查长度变化是否超过 5%,内容是否已“更改”?或者是否存在某种散列算法,如果仅更改了一小部分字符串/内容,散列值将保持不变?

最佳答案

您可以尝试在来自服务器的响应中使用“last-mofidied” header 中包含的值。将其解析为一个漂亮的对象将允许进行简单的日期比较,让您检查是否应该重新抓取。例如(在 Python 中使用出色的 requests 库:

import requests
r = requests.get('http://en.wikipedia.org/wiki/Monty_Python')
site_last_modified_date = r.headers["Last-Modified"]

# from here, just parse the date and compare it with the last recorded date

关于php - 检查页面内容是否已更改的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28192838/

相关文章:

php - MySQL 向数字列加一

python - 如何在 Python 3.8+ 和 Python 2.7+ 中使用 unittest.mock 包?

c++ - 将唯一的 int 数组映射到范围 0..n 的索引的哈希函数

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - CURLOPT_POST 与 CURLOPT_POSTFIELDS : Is CURLOPT_POST option required?

php - 从另一个模型cakephp 3.5获取数据

在 Pandas 数据帧上使用 'slicer' 和 'where' 等效项的 Pythonic 方式

python - 如何快速有效地检查图像是否主要是背景?

php - 如何使用 Android 客户端将密码散列到 PHP 服务器?

java - 从多个 Java 字符串对象创建散列