作为构建网络爬虫的一部分,我提取了爬虫访问的链接。
什么样的数据结构适合存储每个带有唯一标识符的 URL,所以在访问页面之前,我可以测试该页面是否已经被访问过。
作为构建网络爬虫的一部分,我提取了爬虫访问的链接。
什么样的数据结构适合存储每个带有唯一标识符的 URL,所以在访问页面之前,我可以测试该页面是否已经被访问过。
一种方法:考虑唯一标识符是页面/网址标题或从 计算的一些唯一哈希url
,例如:
网址: http : //stackoverflow.com/questions/18102087/data-structure-for-uniqurly-storing-links
ID: 18102087 或唯一哈希(MD5 等)
其他 URL: Root/questions/tagged/java, Root/questions/18102124/mysql-database-using-matlab
数据结构 :
Map [ROOT-URL, Map[ID, URL]]
获取/读取:
获取一个ROOT的所有URL:
益处:
缺点:
内存,维护额外的 ROOT 字符串(比如数百万次)。一种Map
方法只有 ID 和 URL
与单个 Map 方法相比,两次查找而不是一次查找,但这应该没问题HashMap
可能HashSet是要走的路。在这种情况下,每个 url(或字符串)都是唯一的标识符。您还可以实现 IEqualityComparer 进行自定义比较。