python搜索殷勤.doc_第1頁(yè)
python搜索殷勤.doc_第2頁(yè)
python搜索殷勤.doc_第3頁(yè)
python搜索殷勤.doc_第4頁(yè)
全文預(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論