为抓取工具抓取的URL生成唯一哈希

时间:2013-11-30 10:57:09

标签: java hash web-crawler

我正在实现一个Crawler,我想为我的系统抓取的每个URL生成一个唯一的哈希码。这将帮助我检查重复的URL,匹配完整的URL可能是一个昂贵的东西。 Crawler每天会抓取数百万个页面。因此,此哈希函数的输出应该是唯一的。

2 个答案:

答案 0 :(得分:1)

除非你提前了解每个地址,并且恰好有一套完美的哈希值,否则这个任务在理论上是不可能的。

根据鸽子原则,无论您使用何种技术进行转换,都必须存在至少两个具有相同Integer值的字符串,因为Integers具有有限范围,而字符串不具有。虽然地址实际上并不是无限长,但您仍然会获得映射到相同哈希值的多个地址。理论上,有无限多的字符串会映射到相同的Integer值。

因此,总之,您应该只使用标准HashMap

此外,您需要担心以下事项:

  

www.stackoverflow.com
http://www.stackoverflow.com
  http://stackoverflow.com
stackoverflow.com
...

都是等价的,所以你需要首先规范化,然后哈希。虽然有一些算法首先给出这个集合会生成一个完美的哈希,但我怀疑这对你的目的是必要的。

答案 1 :(得分:0)

我认为解决方法是删除第一部分,例如http://http://www.,然后在清除之后删除最后一部分,例如/?...#...应该有一个干净的URL,然后你可以为它做一个MD5哈希。