我有一个爬虫程序可以爬取数十万个页面并索引/解析页面内容,我正在努力的一件事是检查页面内容是否已更新,以一种有效的方式,无需抓取它并检查页面内容。
显然我可以加载整个页面,然后重新解析所有内容并将其与我存储在数据库中的内容进行比较。然而,这是非常低效的,并且会使用大量计算,从而导致高昂的托管费用。
我正在考虑比较散列值,问题是如果页面更改了单个字节或字符,散列值就会不同。因此,例如,如果页面在页面上显示当前日期,则每次哈希都会不同,并告诉我内容已更新。
那么……你会怎么做呢?你会看看 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/