1

作为构建网络爬虫的一部分,我提取了爬虫访问的链接。

什么样的数据结构适合存储每个带有唯一标识符的 URL,所以在访问页面之前,我可以测试该页面是否已经被访问过。

4

2 回答 2

1

一种方法:考虑唯一标识符是页面/网址标题或从 计算的一些唯一哈希url,例如:

网址: http : //stackoverflow.com/questions/18102087/data-structure-for-uniqurly-storing-links

ID: 18102087 或唯一哈希(MD5 等)

根: http ://stackoverflow.com

其他 URL: Root/questions/tagged/java, Root/questions/18102124/mysql-database-using-matlab

数据结构 :

Map [ROOT-URL, Map[ID, URL]]

获取/读取:

  • 给定 URL,提取 ROOT 和 ID(字符串解析/正则表达式函数)
  • 在返回的映射中查找 ROOT 和 LOOKUP ID

获取一个ROOT的所有URL:

  • 给定 URL,提取 ROOT 和 ID
  • 查找根

益处:

  • 在根或基本 URL 上分组,可用于各种目的(比如修复深度结构)
  • 减少 Hash colisions

缺点:

  • 内存,维护额外的 ROOT 字符串(比如数百万次)。一种Map方法只有 ID 和 URL

  • 与单个 Map 方法相比,两次查找而不是一次查找,但这应该没问题HashMap

于 2013-08-07T11:46:59.717 回答
0

可能HashSet是要走的路。在这种情况下,每个 url(或字符串)都是唯一的标识符。您还可以实现 IEqualityComparer 进行自定义比较。

于 2013-08-07T11:27:21.633 回答