首頁 後端開發 php教程 搜尋引擎核心技術_php基礎

搜尋引擎核心技術_php基礎

Jun 28, 2017 pm 03:37 PM
php 基礎 搜尋引擎

談到網頁搜尋引擎時,大多數人都會想到雅虎。的確,雅虎開創了一個網路絡的搜尋時代。然而,雅虎目前用來搜尋網頁的技術卻並非該公司原先自己開發的。 2000年8月,雅虎採用了Google(www.google.com)這家由史丹佛大學學生創立的風險公司的技術。理由非常簡單,Google的搜尋引擎比雅虎先前使用的技術能更快、更準確搜尋到所需的資訊。

  讓我們自己來設計、開發一個強勁、高效的搜尋引擎和資料庫恐怕短時間內在技術、資金等方面是不可能的,不過,既然雅虎都在使用別人的技術,那麼我們是不是也可以使用別人現成的搜尋引擎網站呢?

剖析程式設計想法

  我們可以這樣設想:模擬一個查詢,向某個搜尋引擎網站發出對應格式的搜尋指令,然後傳回搜尋結果,對結果的HTML程式碼進行分析,剝離多餘的字元和程式碼,最後按所需的格式顯示在我們自己的網站頁面裡。

  這樣,問題的關鍵就在於,我們要選定一個搜尋資訊準確(這樣我們的搜尋才會更有意義啊)、速度快(因為我們分析搜尋結果並顯示需要額外的時間) ,搜尋結果簡潔(便於進行HTML原始碼分析與剝離)的搜尋網站,由於新一代搜尋引擎Google的各種優良特性,這裡我們選擇它為例,來看看用PHP怎樣實現後台對Google(www. google.com)搜尋、前台個人化顯示此流程。

  我們先來看看Google的查詢指令的構成。進入www.google.com網站,在查詢欄中輸入“abcd”,點擊查詢按鈕,我們可以發現瀏覽器的網址列變成:"http://www.google.com/search?q=abcd&btnG=Google %CB%D1%CB%F7&hl=zh-CN&lr=",可見,Google是透過表單的get方式來傳遞查詢參數並遞交查詢指令的。我們可以使用PHP中的file()函數來模擬這個查詢過程。

了解File()函數

  語法: array file(string filename);

  傳回值為數組,將檔案全部讀入數組變數中。這裡的文件可以是本地的,也可以是遠端的,遠端檔案必須指明所使用的協定。例如: result=file(“http://www.google.com/search?q=a ... mp;hl=zh-CN&lr=”),該語句將模擬我們在Google上查詢單字「abcd」的過程,並將搜尋結果以每行為元素,傳回數組變數result。因為這裡讀取的檔案是遠端的,所以協定名稱「http://」不能缺少。

  如果要讓使用者輸入搜尋字元進行任意搜索,我們可以做一個輸入文字方塊和提交按鈕,並將上文中的被搜尋字元「abcd」用變數取代:
echo '

'; //沒有參數的form,預設提交方式為get,提交到本身
echo ''; / /建構一個文字輸入框
echo ''; //建構一個提交查詢按鈕
echo '
';

if (isset( keywords)) //提交後PHP會產生變數kwywords,即要求下面的程式在提交後執行
{
urlencode( keywords); //對使用者輸入內容進行URL編碼
result=file("http://www.google.com/search?q=". keywords."&btnG=Google%CB%D1%CB%F7&hl=zh-CN&lr=");
/ /對查詢語句進行變數替換,將查詢結果保存在陣列變數result中
result_string=join(" ", result); //將陣列$result合併成字串#,各陣列元素之間用空格黏和
... //進一步處理
}
?>

  上面的這段程式已經能按使用者輸入內容進行查詢,並將傳回的結果合成一個字串變數$result_string。請注意要使用urlencode()函數將使用者輸入內容進行URL編碼,才可以正常地對輸入的漢字、空格以及其他特殊字元進行查詢,這樣做也是盡可能逼真地模擬Google的查詢命令,保證搜尋結果的正確性。

對Google的分析

  為了便於理解,現在假設我們所真正需要的東西是:搜尋結果的標題。網址和簡介等,這是一個簡潔而典型的需求。這樣,我們要做的便是:去除Google搜尋結果的台頭和腳註,包括一個Google的標誌、再次搜尋的輸入框和搜尋結果說明等,並且在剩餘的搜尋結果各項條目中剝離原來的HTML格式標記,替換成我們想要的格式。

  要做到這一點,我們必須仔細分析Google搜尋結果的HTML原始碼,找到其中的規律。不難發現,在Google的搜尋結果的正文總是包含在源碼的第一個

標記和倒數第二個

標記之間,並且倒數第二個

標記後緊跟table字符,而且這個組合「


  以下所有程序均依序接續在上文程序的「進一步處理」處。

  result_string = strstr( result_string, "

"); //取result_string從第一個

開始後的字串,以去除Google台頭
position= strpos( result_string,"

table符號的位置
result_string= substr( result_string,0, position);//截取第一個

table符號之前的字串,以去除腳註

#應用與實作

  OK,現在我們已經得到有用的HTML原始碼主幹了,剩下的問題是如何自主地顯示這些內容。也是很規律的用
分隔,也就是各成一個段落,按這個特點我們用explode()函數把每個條目切開:

  語法:explode(string separator, string string) ;

  傳回一個數組,按separator切開後的各個小字符串被保存在數組中。 ; //用字符串"

"把結果切開

  我們就得到一個數組result_array,其中每個元素都是一個搜尋結果條目。及其HTML顯示格式程式碼,然後依要求替換就行了。 ##}

  對於每個條目,我們也很容易找到一些特點:每個條目都由標題、摘要、簡介、類別、網址等組成,每個部分都換行,即包含every_item=explode("
", result_array[ i]);

#  這樣我們得到一個數組every_item,其中every_item[0]就是標題, every_item[1]和every_item[2]兩行為摘要,every_item[3]和every_item[4]等的頭部如果包含「簡介:」、「< font size=-1 color=#6f6f6f>類別:< /font>」字符,則是簡介或類別(因為有的結果條目沒有該項) ,如果頭部包含“< font color=green>”則肯定就是網址啦,這種對比判斷我們常使用
正規表示式
(略),如果要替換也很方便,例如包含標題的$every_item[0],其本身是有連結的,我們希望修改這個連結屬性,讓它在新視窗中開啟連結:
echo eregi_replace(' {
... //處理每個條目中除去第一項(第一項為標題,已經顯示)的每一項
... //更多格式修改
}   這樣就修改了連結屬性,其餘很多顯示格式的修改、剝離、替換都能用正規取代eregi_replace()來完成。

  至此我們已經得到了每個搜尋條目的每一項,並能任意修改每項的格式,甚至可以給他套上漂亮的表格。然而一個好的程式應該可以適應各種運作環境的,這裡也不例外,我們其實還只是討論了搜尋結果的HTML剝離的一種框架方法,真正要做得完美,還要考慮很多內容,例如要顯示總共搜尋多少結果,分成多少頁等等,甚至還可以刨除那些與Google相關的「類別」、「簡介」等程式碼,讓客戶根本看不到原始網站。不過這些內容和要求我們都能透過分析HTML進行剝離來獲得。現在大家完全能自己動手,做個極富個人化的搜尋引擎啦。 

以上是搜尋引擎核心技術_php基礎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles