



全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Python:開(kāi)發(fā)簡(jiǎn)易搜索引擎(2012-06-29 11:45:06) 轉(zhuǎn)載標(biāo)簽: python開(kāi)發(fā)搜索引擎雜談分類(lèi): python Python:開(kāi)發(fā)簡(jiǎn)易搜索引擎對(duì)于內(nèi)容性的站點(diǎn)來(lái)說(shuō),搜索引擎真是一個(gè)不錯(cuò)的東東。不需要再為了找自己要看的東西翻遍整個(gè)網(wǎng)站,而只是輸入關(guān)鍵字,讓腳本來(lái)幫你找。這里,我寫(xiě)了個(gè)簡(jiǎn)單的站內(nèi)搜索引擎,并且要講解一下它是如何實(shí)現(xiàn)的。這個(gè)搜索引擎非常簡(jiǎn)單,但是很容易擴(kuò)展。比如,如果你用 urllib 包來(lái)抓取網(wǎng)頁(yè),而不是僅僅索引本地的文件,你就可以用它來(lái)搜索 internet 上的其他站點(diǎn)了。你所要做的是 建立一個(gè)數(shù)據(jù)庫(kù)用來(lái)儲(chǔ)存所有的單詞和這些單詞的出現(xiàn)位置 (在示例中我使用的是 MySQL ) 一個(gè)查找單詞和單詞出現(xiàn)位置的腳本,并將其存入數(shù)據(jù)庫(kù)中 一個(gè) HTML 的搜索表單 一個(gè)用來(lái)從數(shù)據(jù)庫(kù)中搜索用戶(hù)提交的關(guān)鍵字的腳本 一個(gè)返回搜索結(jié)果的頁(yè)面,搜索結(jié)果要鏈向搜索到的相關(guān)頁(yè)面 創(chuàng)建數(shù)據(jù)庫(kù)在你的MySQL數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)表 (table),命名為 search。我們需要以下5列: search_id, INTEGER, NOT NULL, AUTO_INCREMENT, UNSIGNED word, VARCHAR(50), NOT NULL occurrence, INTEGER, NOT NULL, UNSIGNED url, VARCHAR(200), NOT NULL link, VARCHAR(200), NOT NULL 然后,把 search_id 設(shè)定為主鍵 (PRIMARY KEY)。如果你覺(jué)得創(chuàng)建一個(gè) MySQL 數(shù)據(jù)庫(kù)有困難的話(huà),不要怕,在互聯(lián)網(wǎng)上相關(guān)的資源非常多。或者你可以看看這個(gè)。確定已經(jīng)把數(shù)據(jù)表放到你的服務(wù)器上,另外還要注意一下安全問(wèn)題。稍后再繼續(xù)這個(gè)話(huà)題 Python 索引器Python 索引器會(huì)遍歷整個(gè)頁(yè)面的正文,并記錄每個(gè)單詞及出現(xiàn)的位置。代碼如下:import string import sys import re import MySQLdb # open database and make cursor conn = MySQLdb.connect(host = localhost, user = root, passwd = *, db = *) cursor = conn.cursor() # first empty the database cursor.execute(TRUNCATE TABLE words) def makeIndex(myurl, link): # open local html file href = link page = myurl f = open(page, rb) f.close # initialize stuff here wordcount = 0 words = for line in f.readlines() : line = string.strip( line ) for word in re.split( + string.whitespace + string.punctuation + + , line ) : word = string.lower( word ) if re.match( + string.lowercase + +$ , word ) : wordcount += 1 if words.has_key( word ) : words word += 1 else : words word = 1 sorted_word_list = words.keys() sorted_word_list.sort() # now populate the database for word in sorted_word_list : cursor.execute(INSERT INTO words (word, occurrence, url, link) VALUES (%s,%s,%s,%s),(word,wordsword,page,href) # index every page of your website makeIndex(yourpage1.html, a href=yourpage1My page 1) makeIndex(yourpage2.html, a href=yourpage2My page 2) # etcetera. cursor.close() 在運(yùn)行這個(gè)腳本以后 (別忘了把代碼中的 yourpage 換成真正的頁(yè)面),剛剛你創(chuàng)建的數(shù)據(jù)表中已經(jīng)填充了每個(gè)單詞和它在頁(yè)面上的出現(xiàn)位置。(譯者注:由于這個(gè) parser 太過(guò)于簡(jiǎn)單,所以 html tag 也會(huì)被當(dāng)作“單詞”被記錄下來(lái),換個(gè) parser 就可以解決這個(gè)問(wèn)題) 如果你的網(wǎng)站內(nèi)容變化了,你就需要再運(yùn)行一次這個(gè)腳本。也許一天一次,或者一天兩次,這個(gè)還是取決于你自己的個(gè)人情況。HTML 搜索表單你可能經(jīng)??吹皆谝粋€(gè)頁(yè)面的上邊或者側(cè)邊欄上有個(gè)搜索框。把這個(gè) HTML 代碼放到你頁(yè)面的某個(gè)地方: 這里有關(guān)于創(chuàng)建 HTML 表單的詳細(xì)信息。這個(gè)表單中最核心的就是 cgi-bin/search.py 這個(gè)腳本,我們下一節(jié)就會(huì)開(kāi)始探究這個(gè)腳本。搜索腳本下面的腳本通過(guò)給定的單詞來(lái)從數(shù)據(jù)庫(kù)中查找結(jié)果,為了省事我們就叫它 search.py 了:conn = MySQLdb.connect(host = localhost, user = searcher, passwd = *, db = *) cursor = conn.cursor() # get results cursor.execute(SELECT occurrence,url,link FROM words WHERE word=%s ORDER BY occurrence DESC,(word) result = cursor.fet
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年二位五通電磁閥項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模板
- 2025年數(shù)字視頻切換臺(tái)項(xiàng)目規(guī)劃申請(qǐng)報(bào)告模板
- 2025年免疫球蛋白診斷血清項(xiàng)目規(guī)劃申請(qǐng)報(bào)告模板
- 2025年活動(dòng)圍欄項(xiàng)目申請(qǐng)報(bào)告
- 特色旅游客運(yùn)合同
- 諾亞方舟公益活動(dòng)協(xié)議
- 施工現(xiàn)場(chǎng)的團(tuán)隊(duì)協(xié)作協(xié)議
- 移動(dòng)手機(jī)客戶(hù)端外包協(xié)議
- 2025年中國(guó)卡拉膠冰淇淋粉市場(chǎng)現(xiàn)狀分析及前景預(yù)測(cè)報(bào)告
- 2025年國(guó)際教育交流項(xiàng)目中跨文化溝通技巧培訓(xùn)報(bào)告
- 十二木卡姆課件
- 全面輪機(jī)英語(yǔ)專(zhuān)業(yè)詞匯
- 安徽工貿(mào)職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試題庫(kù)
- 光伏系統(tǒng)調(diào)試方案
- 廣東省珠海市電工等級(jí)低壓電工作業(yè)
- 【國(guó)開(kāi)】2023年春《互換性與技術(shù)測(cè)量》形考任務(wù)一二三四參考答案
- 徠卡v lux4中文說(shuō)明書(shū)大約工作時(shí)間和可拍攝圖像數(shù)量
- 英語(yǔ)演講知到章節(jié)答案智慧樹(shù)2023年哈爾濱工程大學(xué)
- 危險(xiǎn)化學(xué)品(柴油)儲(chǔ)運(yùn)安全管理考試試題及答案
- 2023年下半年軟件設(shè)計(jì)師上午真題及參考答案
- 中華優(yōu)秀傳統(tǒng)文化智慧樹(shù)知到答案章節(jié)測(cè)試2023年青島黃海學(xué)院
評(píng)論
0/150
提交評(píng)論