談到網(wǎng)頁搜索引擎時(shí),很多人都會(huì)想到雅虎。的確,雅虎開創(chuàng)了一個(gè)互聯(lián)網(wǎng)絡(luò)的搜索時(shí)代。然而,雅虎目前用于搜索網(wǎng)頁的技術(shù)卻并非該公司原先自己開發(fā)的。2000年8月,雅虎采用了Google這家由斯坦福大學(xué)學(xué)生創(chuàng)建的公司的技術(shù)。理由非常簡(jiǎn)單,Google的搜索引擎比雅虎先前使用的技術(shù)能更快、更準(zhǔn)確搜索到所需要的信息。
讓我們自己來設(shè)計(jì)、開發(fā)一個(gè)強(qiáng)勁、高效的搜索引擎和數(shù)據(jù)庫恐怕短時(shí)間內(nèi)在技術(shù)、資金等方面是不可能的,不過,既然雅虎都在使用別人的技術(shù),那么我們是不是也可以使用別人現(xiàn)成的搜索引擎網(wǎng)站呢?
剖析編程思路
我們可以這樣設(shè)想:模擬一個(gè)查詢,向某個(gè)搜索引擎網(wǎng)站發(fā)出相應(yīng)格式的搜索命令,然后傳回搜索結(jié)果,對(duì)結(jié)果的HTML代碼進(jìn)行分析,剝離多余的字符和代碼,最后按所需要的格式顯示在我們自己的網(wǎng)站頁面里。
這樣,問題的關(guān)鍵就在于,我們要選定一個(gè)搜索信息準(zhǔn)確(這樣我們的搜索才會(huì)更有意義?。?、速度快(因?yàn)槲覀兎治鏊阉鹘Y(jié)果并顯示需要額外的時(shí)間),搜索結(jié)果簡(jiǎn)潔(便于進(jìn)行HTML源代碼分析和剝離)的搜索網(wǎng)站,由于新一代搜索引擎Google的各種優(yōu)良特性,這里我們選擇它為例,來看看用PHP怎樣實(shí)現(xiàn)后臺(tái)對(duì)Google搜索、前臺(tái)個(gè)性化顯示這一過程。
我們先來看看Google的查詢命令的構(gòu)成。進(jìn)入Google網(wǎng)站,在查詢欄中輸入“abcd”,點(diǎn)擊查詢按鈕,我們可以發(fā)現(xiàn)瀏覽器的地址欄變成:"
了解File( ) 函數(shù) 語法: array file(string filename); 返回值為數(shù)組,將文件全部讀入數(shù)組變量中。這里的文件可以是本地的,也可以是遠(yuǎn)程的,遠(yuǎn)程文件必須指明所使用的協(xié)議。例如:result=file(“http://www.google.com/search?q=a...mp;hl=zh-CN&lr=”),該語句將模擬我們?cè)贕oogle上查詢單詞“abcd”的過程,并將搜索結(jié)果以每行為元素,傳回到數(shù)組變量result中。因?yàn)檫@里讀取的文件是遠(yuǎn)程的,所以協(xié)議名“http://”不能缺少。 如果要讓用戶輸入搜索字符進(jìn)行任意搜索,我們可以做一個(gè)輸入文本框和提交按鈕,并將上文中的被搜索字符“abcd”用變量替換: echo " "; file://沒有參數(shù)的form,默認(rèn)提交方式為get,提交到本身 echo "; file://構(gòu)造一個(gè)文本輸入框 echo "; file://構(gòu)造一個(gè)提交查詢按鈕 echo " "; if (isset( keywords))file://提交后PHP會(huì)生成變量kwywords,即要求下面的程序在提交后運(yùn)行 urlencode( keywords); file://對(duì)用戶輸入內(nèi)容進(jìn)行URL編碼