我有一个爬虫,可以爬取数十万个页面并索引/解析页面的内容,但我遇到的问题是如何以高效的方式检查页面内容是否已更新,而不必爬取页面并检查其内容。
显然,我可以加载整个页面,重新解析所有内容,并将其与数据库中存储的内容进行比较。然而,这非常低效,会消耗大量计算资源,导致高额的主机费用。
我考虑比较哈希值,但问题在于如果页面改变了一个字节或字符,哈希值就会不同。例如,如果页面在页面上显示当前日期,则每次哈希值都会不同,告诉我内容已更新。
那么...你会怎么做呢?你会查看HTML的kb大小吗?您会查看字符串长度并检查例如长度是否增加了5%以上,表示内容已“更改”吗?还是有一种哈希算法,只要字符串/内容的小部分发生变化,哈希值就保持不变?
显然,我可以加载整个页面,重新解析所有内容,并将其与数据库中存储的内容进行比较。然而,这非常低效,会消耗大量计算资源,导致高额的主机费用。
我考虑比较哈希值,但问题在于如果页面改变了一个字节或字符,哈希值就会不同。例如,如果页面在页面上显示当前日期,则每次哈希值都会不同,告诉我内容已更新。
那么...你会怎么做呢?你会查看HTML的kb大小吗?您会查看字符串长度并检查例如长度是否增加了5%以上,表示内容已“更改”吗?还是有一种哈希算法,只要字符串/内容的小部分发生变化,哈希值就保持不变?
last-modified
头信息(或可选的ETag
)是否可靠?如果是,就使用它。 - roippiHEAD
HTTP 请求,而不是普通的GET
。 - Sylvain Lerouxlast-modified
- 不幸的是,并非所有服务器都能正确返回此日期。我认为这不是一个可靠的解决方案。我认为更好的方式是将哈希和内容长度组合在一起。检查哈希值,如果发生了改变,则检查字符串长度。 - stepozer