基于深網(wǎng)絡(luò)的垂直搜索引擎蜘蛛的基本解決方案_第1頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基于深網(wǎng)絡(luò)的垂直搜索引擎蜘蛛的基本解決方案從直觀上面看,檢索器普通在form標(biāo)簽里面,有幾個(gè)輸入數(shù)據(jù)的文本框,加上一個(gè)提交的按鈕。像百度這樣形式的檢索器,很簡單自動(dòng)識(shí)別出來。這樣或許你會(huì) 認(rèn)為檢索器很簡單自動(dòng)構(gòu)造,其實(shí)不然?,F(xiàn)在的網(wǎng)頁越來越美觀,很少有頁面還是用法那種原始的檢索樣式,不信你看:這個(gè)檢索器幾乎是無法自動(dòng)識(shí)別的。起碼我臨時(shí)沒有看到或者想到方法自動(dòng)識(shí)別。雖然有的檢索器無法自動(dòng)識(shí)別,但檢索器絕對(duì)都是可以人工識(shí)別的。所以,一定可以設(shè)置一個(gè)可以配置的檢索器。這就是我們蜘蛛設(shè)計(jì)的第一步:檢索器的配置。檢索器對(duì)于外界來說,就是一個(gè)不斷產(chǎn)生銜接哀求地址的機(jī)器,直到?jīng)]有可以產(chǎn)生的為止。它產(chǎn)生的地址

2、可以認(rèn)為由4部分組成:1)哀求的url地址;2)哀求 的辦法;3)哀求的參數(shù);4)發(fā)送哀求的編碼。這幾部分對(duì)于討論過的人來說,應(yīng)當(dāng)很簡單理解。本處不作過多解釋。2.2 頁面獵取我們首先用檢索器得到一個(gè)哀求的地址,接著就是發(fā)送這個(gè)哀求地址,得到對(duì)應(yīng)的頁面信息。為了得到頁面信息,我們需要一個(gè)強(qiáng)壯的http文件(頁面)下載器。為什么這么說呢?第一,無數(shù)網(wǎng)站都是需要登陸才干夠拜訪到機(jī)密信息 的, 故你的下載器必需支持cookie;其次,網(wǎng)頁編碼識(shí)別是一個(gè)難題,下載器需要仔細(xì)的處理這個(gè)方面的問題;第三,http的其它各種標(biāo)準(zhǔn)也需要支持,比 如,頁面跳轉(zhuǎn)的支持;第四,其他特殊的需求,比如,對(duì)于下載數(shù)據(jù)格式

3、的限定(如只下載文本文件)?;谶@4個(gè)方面和其他某些方面的考慮,我們建立了蜘蛛的 第一個(gè)項(xiàng)目:httpdownloader。httpdownloader 項(xiàng)目介紹:這個(gè)項(xiàng)目重點(diǎn)解決了網(wǎng)頁編碼的識(shí)別問題(這個(gè)問題是沒有完善解決計(jì)劃的,我們只能夠從unicode標(biāo)準(zhǔn)中定義的utf標(biāo)準(zhǔn)的解釋里面找到一些額外的辦 法。固然了,剛好有些開源的代碼能夠支持挺直分析二進(jìn)制數(shù)據(jù)對(duì)應(yīng)的文本屬于哪國文字,這個(gè)也是一個(gè)不錯(cuò)的補(bǔ)充。)其它問題大部分都是靠開源庫搞定,少部分 自己寫代碼搞定,都沒有什么自得的地方值得議論。另外,在舉行大量測(cè)試之后,發(fā)覺實(shí)際狀況中有各式各樣的問題,比如,哀求url編碼就是其中的一個(gè)問題。

4、默認(rèn)狀況下,url編碼應(yīng)當(dāng)用法utf-8,可是,國內(nèi)的網(wǎng)站無數(shù)都是要求gb2312編碼的,或者說utf-16編碼。假如貿(mào)然認(rèn)為都是utf-8的 話,就會(huì)碰到連baidu的頁面都無法正確獲得的問題。這個(gè)只是冰山一角,還有好幾個(gè)這類型的問題,都是和中國國情不兼容。順便說一句,這個(gè)項(xiàng)目主要以httpclient 作為底層。2.3 頁面解析雖然我個(gè)人曾經(jīng)用c寫過html代碼dom樹解析的程序,但我們還是用法了開源的東西來做頁面解析。htmlparser和nekohtml明顯是做頁 面解析的2個(gè)最出名最好的開源庫。不過,它們都有不少的缺點(diǎn)(不兼容),當(dāng)你碰到后,你需要修改它們的代碼,讓他們能夠正確的運(yùn)作

5、。這里舉個(gè)例子解釋一 下:基本的htmlparser(最新版本的,2006年9月)無法解析下面的代碼:very!由于它竟然沒有識(shí)別strong標(biāo)簽!假如比較一下nekohtml,你或許會(huì)感覺到nekohtml才像專業(yè)人士寫的代碼,而htmlparser有點(diǎn)業(yè)余。其實(shí)呢?。nekohtml并不是很好很好。我們知道balance是nekohtml最自得的地方,由于其他的解析都是擴(kuò)展的別人的代碼。但是,作者身處在一個(gè)有 序的環(huán)境之中,并不需要考慮過多的容錯(cuò)性問題,這挺直導(dǎo)致了balance做的很普通(對(duì)于中國國情來說)。舉個(gè)容易例子:testie和ff會(huì)說明為:test,而nekohtml則說明為t

6、est雖然我自己也感覺htmlparser過于業(yè)余,但是,它做的是一個(gè)比較有擴(kuò)展性的框架,這點(diǎn)比nekohtml強(qiáng)。另外,它對(duì)加密script也舉行了相關(guān)處理。綜合起來看,假如你只是需要舉行html解析,你就該用法htmlparser;假如你需要對(duì)js舉行處理,你就需要用法nekohtml,不然,你會(huì)碰到無數(shù)沒有html也沒有body標(biāo)簽的網(wǎng)頁。為了解決nekohtml和htmlparser的一些問題和提高容錯(cuò)度,我們建立了2個(gè)新的項(xiàng)目:nekohtml2007 和htmlparser2007 ,它們特地用來解決這2個(gè)開源項(xiàng)目的bug(雖然我很希翼那些庫的作者能夠出來解決這些bug)。2.4

7、頁面js解析至于為什么要處理js,你可以容易的拜訪, 然后看看源文件。明了了吧?現(xiàn)在無數(shù)網(wǎng)站的頁面都是用法js構(gòu)建出來的,更不用說那些用法web2.0(ajax)技術(shù)的網(wǎng)站了。一個(gè)強(qiáng)壯的有競爭力的商 業(yè)垂直搜尋引擎,不支持這種東西是不可的。最基本的支持js的辦法是用法ie或者ff(firefox)用法的借口,調(diào)用它們解析頁面,不過,這種辦法的 掃瞄速度超慢,不行能成為一個(gè)搜尋引擎的挑選。所以,必需自己想方法做一個(gè)支持的庫出來(忽視圖像渲染部分,能夠加快構(gòu)建速度和處理時(shí)光)。說支持js簡單,可是,到底該怎么支持呢?好在我多年前關(guān)注js的時(shí)候,已經(jīng)關(guān)注過一個(gè)叫spidermonkey的東西了。它的

8、java版本叫 rhino?,F(xiàn)在rhino已經(jīng)整合到j(luò)dk1.6里面了,所以,各位不用再去下載它了。rhino它是一個(gè)js腳本的說明運(yùn)行庫。但它并不支持dom樹 (由于js事實(shí)上和html已經(jīng)沒有任何關(guān)系了,js更多的時(shí)候用在腳本處理里面,這點(diǎn)和vbscript有點(diǎn)像)。為了讓它支持dom樹,需要我們自己 舉行擴(kuò)展。討論一番rhino,再討論一番其他用法了rhino的開源項(xiàng)目(特殊推舉你看看htmlunit 項(xiàng) 目的源代碼,最新的htmlunit1.13已經(jīng)可以比較好的支持js的解析了,假如你只是做點(diǎn)基本的小應(yīng)用,可以用它來做js方面的問題),你就應(yīng)當(dāng)能 夠找到思路了。剩下的就是艱苦的編程了,很無趣的工作,由于你需要滿足ie的規(guī)范,也要滿足ff(dom1-dom3)的規(guī)范。做好js的解析之后,你還可以考慮css的解析,css的解析目前沒有發(fā)覺特殊好的開源工具。一切完備之后,就是把它們組合起來,構(gòu)建一個(gè)模擬ie和ff 的掃瞄器了(沒有圖形界面,所以,速度飛速)。掃瞄器支持的額外功能可能要按照自己的需要來定了。為了解決js的問題,我們建立了一個(gè)browser 的 項(xiàng)目。browser項(xiàng)目模擬了ie的工作方式,主要是2個(gè)方面的處理:1)cookie的處理;2)js的處理。cookie的處理大部分由底層處理, js的處理包含了js的解析、js的運(yùn)行、

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論