过程是这样的。我有一组数据,其中包括网址,公司名称和一些其他有关公司的信息。我读取这些数据,获取URL,抓取它们,并用随机生成的UUID保存抓取的数据。
UUID uuid = UUID.randomUUID();
这对于第一轮爬行来说是很好的。问题是当我想重新抓取数据的时候。我将有一组新的数据-which可能是重复的-因此将生成一个新的UUID和一个新的记录。但这并不是我所期望的。我想要做的是看看哪些东西已经被爬取,并更新它们,而不是添加新的记录。另外,这并不是读取URL并查看URL是否已被爬取,因为公司可能会更改其URL,甚至更改其名称。那么如何生成这些UUID呢?并确保它们以某种方式链接到相同的对象,这样我就可以更新对象(记录),而不是在数据库和搜索结果中有两次。
发布于 2017-09-21 17:21:00
您可以创建唯一且可靠地标识每个数据项的最小属性集的散列。
然后,您将持久化这个散列,并在随后的爬行中将收到的数据项传递到散列函数中,并将结果与已经持久化的结果进行比较。如果有匹配,则更新,否则插入。这是该方法的粗略近似值,但我想您会明白的。
棘手的部分是确定哪些属性应该包含在散列中。入选的任何候选人必须:
如果URLS是可变的--如你所说--那么其中一个可能的候选者是无效的,所以你可能不得不偷看有效载荷,看看它们是否包含可靠的候选者,但如果这些有效载荷来自众多的、不同的来源,那么你不太可能依赖它们都符合一致的“散列方案”。
这个问题没有什么神奇的解决方案,只有你--作为数据的读者--才会知道这些属性是什么,因为唯一的定义可能取决于你如何使用这些数据。
https://stackoverflow.com/questions/46339866
复制相似问题