搜索引擎工作原理
優(yōu)采云 發(fā)布時(shí)間: 2022-05-08 21:18搜索引擎工作原理
一般來(lái)說(shuō)自己網(wǎng)站被其他網(wǎng)站引用最多的頁(yè)面就是首頁(yè),所以它的權重相比來(lái)說(shuō)是最高的,比如A頁(yè)面是A網(wǎng)站的首頁(yè),可以得出的結論是,離A網(wǎng)頁(yè)更進(jìn)的頁(yè)面,頁(yè)面權重也容易更高,比如A頁(yè)面上的超鏈接更容易被蜘蛛爬行,更容易獲得蜘蛛的抓取,那些沒(méi)被蜘蛛發(fā)現的網(wǎng)頁(yè),權重自然就是0。
還有一點(diǎn)比較重要的是,蜘蛛在爬行頁(yè)面時(shí)會(huì )進(jìn)行一定程度的復制檢測,也就是當前被爬行的頁(yè)面的內容,是否和已經(jīng)保存的數據有重合(當頁(yè)面內容為轉載/不當抄襲行為時(shí)就會(huì )被蜘蛛檢測出來(lái)),如果一個(gè)權重很低的網(wǎng)站上有大量轉載/抄襲行為,蜘蛛很可能不會(huì )再繼續爬行。
之所以要這么做也是為了用戶(hù)的體驗,如果沒(méi)有這些去重步驟,當用戶(hù)想要搜索一些內容時(shí),發(fā)現返回的結果全都是一模一樣的內容,會(huì )大大影響用戶(hù)的體驗,最后導致的結果就是這個(gè)搜索引擎絕對不會(huì )有人再用了,所以為了用戶(hù)使用的便利,也是為了自己公司的正常發(fā)展。
地址庫
互聯(lián)網(wǎng)上的網(wǎng)頁(yè)這么多,為了避免重復爬行和抓取網(wǎng)頁(yè),搜索引擎會(huì )建立地址庫,一個(gè)是用來(lái)記錄已經(jīng)被發(fā)現但還沒(méi)有抓取的頁(yè)面,一個(gè)是已經(jīng)被抓取過(guò)的頁(yè)面。
待訪(fǎng)問(wèn)地址庫(已經(jīng)發(fā)現但沒(méi)有抓?。┲械牡刂穪?lái)源于下面幾種方式:
1.人工錄入的地址
2.蜘蛛抓取頁(yè)面后,從HTML代碼中獲取新的鏈接地址,和這兩個(gè)地址庫中的數據進(jìn)行對比,如果沒(méi)有,就把地址存入待訪(fǎng)問(wèn)地址庫。
3.站長(cháng)(網(wǎng)站負責人)提交上去的想讓搜索引擎抓取的頁(yè)面。(一般這種效果不大)
蜘蛛按照重要性從待訪(fǎng)問(wèn)地址庫中提取URL,訪(fǎng)問(wèn)并抓取頁(yè)面,然后把這個(gè)URL地址從待訪(fǎng)問(wèn)地址庫中刪除,放進(jìn)已訪(fǎng)問(wèn)地址庫中。
文件存儲
蜘蛛會(huì )將抓取的數據存入原始頁(yè)面數據庫。
存入的數據和服務(wù)器返回給蜘蛛的HTML內容是一樣的,每個(gè)頁(yè)面存在數據庫里時(shí)都有自己的一個(gè)獨一無(wú)二的文件編號。
預處理
我們去商場(chǎng)買(mǎi)菜時(shí),會(huì )看到蔬菜保險柜里的這些蔬菜被擺放的整整齊齊,這里舉的例子是那些用保鮮膜包好有經(jīng)過(guò)包裝的蔬菜。
最后呈現在顧客面前的就是上面這張圖那樣,包裝完好,按照不同的分類(lèi)擺放有序,顧客一眼就能很清楚的看到每個(gè)區域分別是什么蔬菜。
在最終完成這個(gè)結果之前,整個(gè)流程大概也是三個(gè)步驟:
1.選出可以售賣(mài)的蔬菜
從一堆蔬菜中,選出可以拿去售賣(mài)的蔬菜。
2.預處理
此時(shí)你面前擺放的就是全部可以拿去售賣(mài)的蔬菜了,但是如果,今天就要把這些蔬菜放到蔬菜保險柜中的話(huà),你今天才開(kāi)始對這些蔬菜進(jìn)行整理會(huì )浪費大量的時(shí)間(給蔬菜進(jìn)行包裝等),說(shuō)不定顧客來(lái)了蔬菜還沒(méi)整理好。
所以你的解決方法是,提前將這些可以拿去售賣(mài)的蔬菜提前包裝好,存放在倉庫里,等保險柜中的蔬菜缺少了需要補貨時(shí),花個(gè)幾分鐘時(shí)間跑去倉庫把蔬菜拿出來(lái)再擺放再貨架上就行了。(我猜的,具體商場(chǎng)里的流程是怎么樣的我也不知道,為了方便后續的理解用生活上的例子進(jìn)行說(shuō)明效果會(huì )更好)
3.擺放上保險柜
也就是上面最后一段內容那樣,當需要補貨時(shí),從倉庫里拿出包裝好的蔬菜,按照蔬菜的類(lèi)別擺放到合適的位置就可以了,這個(gè)就是最后的排序步驟。
回到搜索引擎的工作流程中,這個(gè)預處理的步驟就和上面商場(chǎng)預處理步驟的作用一樣。
當蜘蛛完成數據收集后,就會(huì )進(jìn)入到這個(gè)步驟。
蜘蛛所完成的工作,就是在收集了數據后將數據(HTML)存入原始頁(yè)面數據庫。
而這些數據,不是用戶(hù)在搜索后,直接用來(lái)進(jìn)行排序并展示在搜索結果頁(yè)的數據。
原始頁(yè)面數據庫中的頁(yè)面數量都是在數萬(wàn)億級別以上,如果在用戶(hù)搜索后對原始頁(yè)面數據庫中的數據進(jìn)行實(shí)時(shí)排序,讓排名程序(每個(gè)步驟所使用的程序不一樣,收集數據的程序叫蜘蛛,排名時(shí)所用的程序是排名程序)分析每個(gè)頁(yè)面數據與用戶(hù)想搜索的內容的相關(guān)性,計算量太大,會(huì )浪費太多時(shí)間,不可能在一兩秒內返回排名結果。
因此,我們需要先將原始頁(yè)面數據庫中的數據進(jìn)行預處理,為最后的排名做好準備。
提取文字
我們存入原始頁(yè)面數據庫中的,是HTML代碼,而HTML代碼中,不僅有用戶(hù)在頁(yè)面上直接可以看到的文字內容,還有其他例如js,AJAX等這類(lèi)搜索引擎無(wú)法用于排名的內容。
首先要做的,就是從HTML文件中去除這些無(wú)法解析的內容,提取出可以進(jìn)行排名處理步驟的文字內容
比如下面這段代碼 <p><br /><br /> <br /> <br /> <br /> <br /> 軟件工程師需要了解的搜索引擎知識<br /> <br /> <br /> MathJax.Hub.Config({<br /> showProcessingMessages: false,<br /> messageStyle: "none",<br /> tex2jax: {<br /> inlineMath: [['$','$'], ['\\(','\\)']],<br /> displayMath: [ ["$$","$$"] ],<br /> skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code', 'a']<br /> }<br /> });<br /> MathJax.Hub.Register.MessageHook("End Process", function (message) {<br /> var eve = new Event('mathjaxfini')<br /> window.dispatchEvent(eve)<br /> })<br /> <br /><br /><br />hi<br />