Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为爬虫程序爬网的URL生成唯一哈希_Java_Hash_Web Crawler - Fatal编程技术网

Java 为爬虫程序爬网的URL生成唯一哈希

Java 为爬虫程序爬网的URL生成唯一哈希,java,hash,web-crawler,Java,Hash,Web Crawler,我正在实现一个爬虫程序,我想为我的系统爬虫的每个URL生成一个唯一的哈希代码。这将帮助我检查重复的URL,匹配完整的URL可能是一件昂贵的事情。爬虫程序将每天抓取数百万页。所以这个散列函数的输出应该是唯一的。除非您提前知道每个地址,并且恰好有一个完美的散列用于所述地址集,否则这个任务在理论上是不可能的 根据鸽子洞原理,考虑到整数有一个有限的范围,而字符串没有,无论您使用何种转换技术,至少必须存在两个具有相同整数值的字符串。虽然实际上地址不是无限长的,但仍然会得到多个映射到同一散列值的地址。理论上

我正在实现一个爬虫程序,我想为我的系统爬虫的每个URL生成一个唯一的哈希代码。这将帮助我检查重复的URL,匹配完整的URL可能是一件昂贵的事情。爬虫程序将每天抓取数百万页。所以这个散列函数的输出应该是唯一的。

除非您提前知道每个地址,并且恰好有一个完美的散列用于所述地址集,否则这个任务在理论上是不可能的

根据鸽子洞原理,考虑到
整数
有一个有限的范围,而字符串没有,无论您使用何种转换技术,至少必须存在两个具有相同
整数
值的字符串。虽然实际上地址不是无限长的,但仍然会得到多个映射到同一散列值的地址。理论上,有无限多个字符串将映射到同一个
整数

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

此外,您需要担心以下几点:

www.stackoverflow.com


stackoverflow.com


它们都是等价的,所以您需要先规范化,然后散列。虽然有些算法会先给出集合,然后生成一个完美的散列,我怀疑这对于您的目的是必要的。

我认为解决方案是首先通过删除第一部分,如
http://
来规范URLhttp://www.
从开头到结尾,如
/
?…
#…
。 在这个清理之后,你应该有一个干净的域URL,你可以为它做一个哈希


但最好的解决方案是使用bloomfilter(一种概率数据结构),它可以告诉您URL可能已访问过保证未访问

为什么不使用HashMap?您建议使用哪种哈希函数?MD5,SHA1,SH224。。。有什么区别吗?在这种情况下,我推荐更快的。Sha 1似乎是最快的: