程序是这样的。我有一组数据,其中包括URL,公司名称和其他有关公司的信息。我读取这些数据,让URL抓取它们并使用随机生成的UUID保存已爬网数据。
UUID uuid = UUID.randomUUID();
这对第一轮爬行很有用。问题是当我想再次重新抓取数据时。我将有一组新的数据 - 可能会重复 - 因此将使用新记录生成新的UUID。但这不是我所期待的。我想要做的是查看已经抓取的内容并更新它们而不是添加新记录。 附:它不是要读取URL并查看URL是否已被抓取,因为公司可能会更改其URL甚至名称。 那么我该如何生成这些UUID呢?并确保它们以某种方式链接到相同的-let说话对象,这样我就可以更新对象(记录),而不是在数据库和搜索结果中使用它两次。
答案 0 :(得分:0)
您可以创建最小属性集的哈希值,这些哈希值唯一且可靠地标识每个数据项。
然后,您将保留此哈希值并在后续爬网时将接收到的数据项传递到哈希函数中,并将结果与已保留的结果进行比较。如果匹配,则更新否则插入。这是方法的粗略近似,但我认为你会得到这个想法。
棘手的部分是确定哪些属性应该包含在哈希中。任何入选候选人必须:
如果URL是 - 正如你所说 - 可变,那么可能的候选者之一是无效的,所以你可能必须偷看有效载荷内部以查看它们是否包含可靠的候选者,但是如果这些有效载荷来自众多,异质的然后,你不可能依赖它们,所有这些都符合一致的“哈希计划”。
没有神奇的解决方案,只有你 - 作为这些数据的读者 - 才会知道这些属性是什么,因为unique的定义可能取决于你如何使用这些数据。