通过爬虫抓取到的内容,难免会出现标题,或内容重复的文章,这时候就需要我们进行排重处理。根据不同的成本和目的,实现排重有不同的方式。
1、标题完全相同
一般会通过Redis存储成功抓取的内容的标题、链接地址,分别以标题、链接地址为Key构建数据。在抓取新内容时,先通过Redis判断是否链接地址是否重复,标题是否重复,二者满足其一,则认为重复,不再抓取入库。
这个办法最容易实现,应该先行,至少可以排除掉60%的重复问题。
2、标题相似,内容相同
这种,无法通过简单的标题匹配进行排查,必须通过文本相似算法进行排重,根据内容数据量级,有不同的解决方案。排重对比的数据量级在数万级下,则直接加载数据在内存中逐一对比计算;排重对比数量级在数十万、上百万量级,则要借助第三方工具进行相似查询,如ElasticSearch。
3、标题不同也不相似,内容相同或相似
内容相似解决方案,同标题相似解决方案,由于内容文本字符远远比标题要长,所需算力远多于标题相似排重。可根据业务的必要性,决定是否解决内容相似的问题。
最后,说的不是排重的问题,是抓取到的内容入库时间相同导致业务展示不好看的问题,这个问题可以通过随机化入库时间来解决,具体的就是入库时间=系统时间-150秒内的随机数。这样来得到同一批次抓取的内容入库时间有差异,业务展示就不会出现大批量的内容显示同一个时间,也就不至那么明显的让用户感知到这些内容是爬虫采集的。