做爬虫的时候,对于已经抓取过的url,如果量很大,有什么好的方式既可以避免重复抓取,又能保证数据的完整性?

通常的解决方法是用 Bloom Filter。但 Bloom Filter 的特点是:

  1. 不存在漏报(False Negative),即某个元素在某个集合中,肯定能报出来。
  2. 可能存在误报(False Positive),即某个元素不在某个集合中,可能也被爆出来。

也就是说,如果一个 url 不在已抓取的集合中,仍然有很小的概率(1%左右)被误报成在集合中,从而导致被忽略抓取。

有没有其他的合适算法?或者有没有什么简单的机制可以让这件事反过来?比如如果在集合中,可以误报,拿最多偶尔重抓一下;但不在集合中就一定会抓取。

回复
阅读 3.7k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏