每天都在用搜索引擎,你知道它的工作原理吗?

优采云 发布时间: 2022-05-25 04:45

  每天都在用搜索引擎,你知道它的工作原理吗?

  一般来说自己网站被其他网站引用最多的页面就是首页,所以它的权重相比来说是最高的,比如A页面是A网站的首页,可以得出的结论是,离A网页更进的页面,页面权重也容易更高,比如A页面上的超链接更容易被蜘蛛爬行,更容易获得蜘蛛的抓取,那些没被蜘蛛发现的网页,权重自然就是0。

  还有一点比较重要的是,蜘蛛在爬行页面时会进行一定程度的复制检测,也就是当前被爬行的页面的内容,是否和已经保存的数据有重合(当页面内容为转载/不当抄袭行为时就会被蜘蛛检测出来),如果一个权重很低的网站上有大量转载/抄袭行为,蜘蛛很可能不会再继续爬行。

  之所以要这么做也是为了用户的体验,如果没有这些去重步骤,当用户想要搜索一些内容时,发现返回的结果全都是一模一样的内容,会大大影响用户的体验,最后导致的结果就是这个搜索引擎绝对不会有人再用了,所以为了用户使用的便利,也是为了自己公司的正常发展。

  地址库

  互联网上的网页这么多,为了避免重复爬行和抓取网页,搜索引擎会建立地址库,一个是用来记录已经被发现但还没有抓取的页面,一个是已经被抓取过的页面。

  待访问地址库(已经发现但没有抓取)中的地址来源于下面几种方式:

  1.人工录入的地址

  2.蜘蛛抓取页面后,从HTML代码中获取新的链接地址,和这两个地址库中的数据进行对比,如果没有,就把地址存入待访问地址库。

  3.站长(网站负责人)提交上去的想让搜索引擎抓取的页面。(一般这种效果不大)

  蜘蛛按照重要性从待访问地址库中提取URL,访问并抓取页面,然后把这个URL地址从待访问地址库中删除,放进已访问地址库中。

  文件存储

  蜘蛛会将抓取的数据存入原始页面数据库。

  存入的数据和服务器返回给蜘蛛的HTML内容是一样的,每个页面存在数据库里时都有自己的一个独一无二的文件编号。

  预处理

  我们去商场买菜时,会看到蔬菜保险柜里的这些蔬菜被摆放的整整齐齐,这里举的例子是那些用保鲜膜包好有经过包装的蔬菜。

  

  最后呈现在顾客面前的就是上面这张图那样,包装完好,按照不同的分类摆放有序,顾客一眼就能很清楚的看到每个区域分别是什么蔬菜。

  在最终完成这个结果之前,整个流程大概也是三个步骤:

  1.选出可以售卖的蔬菜

  从一堆蔬菜中,选出可以拿去售卖的蔬菜。

  2.预处理

  此时你面前摆放的就是全部可以拿去售卖的蔬菜了,但是如果,今天就要把这些蔬菜放到蔬菜保险柜中的话,你今天才开始对这些蔬菜进行整理会浪费大量的时间(给蔬菜进行包装等),说不定顾客来了蔬菜还没整理好。

  所以你的解决方法是,提前将这些可以拿去售卖的蔬菜提前包装好,存放在仓库里,等保险柜中的蔬菜缺少了需要补货时,花个几分钟时间跑去仓库把蔬菜拿出来再摆放再货架上就行了。(我猜的,具体商场里的流程是怎么样的我也不知道,为了方便后续的理解用生活上的例子进行说明效果会更好)

  3.摆放上保险柜

  也就是上面最后一段内容那样,当需要补货时,从仓库里拿出包装好的蔬菜,按照蔬菜的类别摆放到合适的位置就可以了,这个就是最后的排序步骤。

  回到搜索引擎的工作流程中,这个预处理的步骤就和上面商场预处理步骤的作用一样。

  当蜘蛛完成数据收集后,就会进入到这个步骤。

  蜘蛛所完成的工作,就是在收集了数据后将数据(HTML)存入原始页面数据库。

  而这些数据,不是用户在搜索后,直接用来进行排序并展示在搜索结果页的数据。

  原始页面数据库中的页面数量都是在数万亿级别以上,如果在用户搜索后对原始页面数据库中的数据进行实时排序,让排名程序(每个步骤所使用的程序不一样,收集数据的程序叫蜘蛛,排名时所用的程序是排名程序)分析每个页面数据与用户想搜索的内容的相关性,计算量太大,会浪费太多时间,不可能在一两秒内返回排名结果。

  因此,我们需要先将原始页面数据库中的数据进行预处理,为最后的排名做好准备。

  提取文字

  我们存入原始页面数据库中的,是HTML代码,而HTML代码中,不仅有用户在页面上直接可以看到的文字内容,还有其他例如js,AJAX等这类搜索引擎无法用于排名的内容。

  首先要做的,就是从HTML文件中去除这些无法解析的内容,提取出可以进行排名处理步骤的文字内容

  比如下面这段代码 <p><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> <br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> <br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> <br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> <br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> 软件工程师需要了解的搜索引擎知识<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> <br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> <br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> MathJax.Hub.Config({<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> showProcessingMessages: false,<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> messageStyle: "none",<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> tex2jax: {<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> inlineMath: [['$','$'], ['\\(','\\)']],<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> displayMath: [ ["$$","$$"] ],<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code', 'a']<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> }<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> });<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> MathJax.Hub.Register.MessageHook("End Process", function (message) {<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> var eve = new Event('mathjaxfini')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> window.dispatchEvent(eve)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> })<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> <br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />hi<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线