【问题标题】:Generating Unique Hash for URL crawled by crawler为爬虫爬取的 URL 生成唯一哈希
【发布时间】:2013-11-30 10:57:09
【问题描述】:

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

【问题讨论】:

  • 为什么不直接使用 HashMap?

标签: java hash web-crawler


【解决方案1】:

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

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

因此,总而言之,您可能应该只使用标准的HashMap

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

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

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

【讨论】:

    【解决方案2】:

    我认为解决方案是首先规范化 URL,方法是从开头删除像 http://http://www. 这样的第一部分和像 /?...#... 这样的最后部分。 清理之后,你应该有一个干净的域 URL,你可以为它做一个哈希。

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

    【讨论】:

    • 您会推荐哪种散列函数? MD5、SHA1、SHA224……会有什么不同吗?
    • 在这种情况下,我会推荐更快的那个。 Sha 1 似乎是最快的:automationrhapsody.com/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 2015-01-23
    相关资源
    最近更新 更多