[网页去重]网络爬虫过程中5种网页去重方法简要介绍和指纹算法

  • A+
所属分类:SEO优化

要想做好网站收集工作,就必须了解重复数据消除算法和指纹算法。只有这样,你才能更好地做好原创网页,帮助网站提升收藏和排名。 对于新网页,爬虫最终通过网页去重算法决定是否对其进行索引。

1。根据文章内容和网页布局格式的组合,大致重复的网页类型可分为4种形式:
1。如果两个文档在内容和布局格式上没有区别,这种重复称为完整重复页面
2。如果两个文档的内容相同,但布局格式不同,这种重复称为内容重复页面。
3。如果两个文档的一些重要内容相同,布局格式相同,这种重复称为布局重复页。
4、两个文档有一些相同的重要内容,但布局格式不同,这种重复称为部分重复页
二。重复网页对搜索引擎的不利影响:
在正常情况下,非常相似的网页不能或只能为用户提供少量的新信息,但是爬行器上的爬行、索引和用户搜索会消耗大量的服务器资源。

三。重复网页给搜索引擎带来的好处:
如果一个网页高度重复,它通常是其内容的更受欢迎的表现形式,表明该网页相对重要。 应当优先考虑包容 当用户搜索时,他们在对输出结果排序时也应该得到更高的权重。
4。重复文档的处理方法:
1、删除
2、对重复文档进行分组

5、simhash文档指纹计算方法:

1、从文档中提取权重特征集来表示文档 例如,假设所有特征都由单词组成,单词的权重由单词频率tf决定
2。对于每个字,通过哈希算法生成n位的二进制值(通常为64位或更多),如上图所示,以生成8位的二进制值为例。 每个单词对应不同的二进制值
3。在n维向量v中(上图中为8维),分别计算每个维的向量 如果对应于该字的位的二进制值是1,则添加特征权重。如果位值为0,则执行减法以这种方式更新矢量
4。在根据以上所述处理所有字之后,如果向量V中的第一维是正数,则第N位指纹中的第一维被设置为1,否则为0

一般来说,我们想要抓取一个网站的所有网址,首先通过初始网址,然后通过网络爬虫提取网页中的所有网址链接,然后抓取提取的每个网址,在每个网页中提取新一轮网址,等等 总的感觉是从上到下抓取网页中的链接。理论上,整个站点中的所有链接都可以被爬网。 然而,问题是网站中的网页链接有循环。
首先,介绍一个简单的想法,这也是一个常用的想法。 我们将抓取的网页放入一个列表中。以第一页为例。第一页被爬网后,我们将第一页放入列表中。然后当我们抓取子网页时,如果我们再次遇到第一页并且第一页已经被抓取,我们可以跳过第一页并继续抓取其他网页,避免重复抓取第一页的情况。因此,爬行站中不会有循环。 以这个想法为出发点,被访问的网址被保存在数据库中,当获得下一个网址时,数据库被搜索以查看该网址是否被访问过。 虽然数据库有缓存,但当数据库中的每个网址都被查询时,效率会迅速下降,所以这种策略并不常用,但仍然是最简单的方法。
第二种方法是将访问过的网址保存到集合中。以这种方式获取网址的速度非常快,基本上不需要查询。 然而,这种方法有一个缺点,将网址保存到集合中实际上就是保存到内存中。当网址数据量非常大(例如1亿个)时,将会增加内存压力。 对于小型爬虫来说,这种方法是非常理想的,但是对于大型网络爬虫来说,这种方法很难达到。
第三种方法是md5编码字符,md5编码可以将字符减少到固定长度 一般来说,md5编码的长度约为128位,约等于16字节。 在减少之前,假设一个url占用502字节的内存,一个字节等于2字节,这等于100字节。 可以看出,md5编码后,节省了大量内存空 通过md5,任何长度的url都可以压缩成相同长度的md5字符串,不会出现重复,从而达到重复数据删除的效果。 这样,在很大程度上节省了内存,scrapy框架采用的方法与md5方法有些相似。因此,在正常情况下,scrapy使用的内存比set方法少得多,即使url的数量级达到数亿级。
第四种方法是使用位图方法进一步压缩字符 这种方法的意思是在计算机中应用8位,即8位,每一位用0或1表示,这是计算机中最小的单位。 如果8位组成一个字节,一位代表一个网址,为什么一位可以决定一个网址?因为我们可以对一个url执行散列函数,并将其映射到该位。 例如,栗树,假设我们有8个网址,分别对应于8位,然后我们可以通过位上的0和1状态来指示这个网址是否存在,这可以进一步压缩内存。 然而,位图方法有一个非常大的缺点,即它的冲突会非常高,因为使用相同的散列函数,很可能将两个不同的URLs或多个不同的URLs映射到一个位置。 事实上,这种哈希方法也是集合方法的一种实现原理。它将url计算为一个函数,并将其映射到位位置。因此,这种方法极大地压缩了内存。 让我们简单地计算一下,或者用1亿个网址来计算,相当于1亿位。通过计算,它相当于1250万字节,除以1024,约为12207kb,约为12mb 空 在实际过程中,内存占用可能大于12mb,但即使如此,与前三种方法相比,这种方法又大大减少了内存占用空 然而,与此同时,冲突的可能性很高,所以这种方法也不太合适。 那么,有什么方法可以进一步优化位图呢?位图是一种大幅压缩内存的方法,可以减少冲突的可能性。答案是肯定的,这是第五条路
第五种方法是布隆过滤器(bloomfilter),它改进位图,并可以通过多个散列函数减少冲突的可能性 这样,一方面可以通过位图方法减少内存,另一方面可以减少冲突。 bloomfilter的原理及其实现将在以后的时间里向您展示。今天,让我们先有一个简单的了解。 Bloomfilter适用于大型网络爬虫,特别是当数量级超大时。bloomfilter方法可以事半功倍。它还经常与分布式爬行器合作,以达到爬行的目的。

胖虎SEO博客

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: