我有一个爬虫程序可以抓取数十万个页面并索引/解析页面内容,而我正在努力的一件事就是检查页面内容是否已经以有效的方式更新,无需抓取它并检查页面内容。
显然我可以加载整个页面,然后重新解析所有内容并将其全部与我存储在数据库中的内容进行比较。然而,效率非常低,使用大量计算导致高额托管费用。
我正在考虑比较哈希值,问题是如果页面改变了单个字节或字符,则哈希值会有所不同。因此,例如,如果页面在页面上显示当前日期,则每次散列都不同并告诉我内容已更新。
那么......你会怎么做?你会看看HTML的kb大小吗?您是否会查看字符串长度并检查例如长度是否已更改超过5%,内容是否已“更改”?或者是否存在某种散列算法,如果字符串/内容的一小部分已被更改,则散列保持不变?
答案 0 :(得分:2)
您可以尝试使用服务器响应中“last-mofidied”标头中包含的值。将其解析为一个漂亮的对象将允许简单的日期比较,让你检查是否应该重新刮。例如(在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