版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
JavaScript解析:讓搜索引擎看到更真實(shí)的網(wǎng)頁
引入JavaScript解析的目的,正是為了解決上述兩方面的問題,其結(jié)果也就是使搜索引擎可以更為清晰的了解用戶實(shí)際打開該網(wǎng)頁時(shí)看到的效果。比如有些網(wǎng)站會(huì)將用戶評論、評分等信息從網(wǎng)頁HTML中抽離,利用JavaScript甚至AJAX等方法在頁面被打開的時(shí)候動(dòng)態(tài)顯示出來,早期的搜索引擎此時(shí)能處理到的頁面內(nèi)容就是缺失的,由此會(huì)進(jìn)一步影響對該頁面索引價(jià)值的判斷。要引入JavaScript解析,需要考慮本身的設(shè)計(jì)與實(shí)現(xiàn)、解析速度和對系統(tǒng)其它方面影響等因素,本文通過一些典型的案例來分析如何設(shè)計(jì)并實(shí)現(xiàn)一套網(wǎng)頁JavaScript解析系統(tǒng),并簡要介紹這樣的系統(tǒng)對于搜索引擎其它部分的作用和影響。一、發(fā)現(xiàn)頁面鏈接一般來說,頁面鏈接都是以HTML中的A標(biāo)簽形式存在,鏈接URL標(biāo)記在href屬性中,但實(shí)際存在著一些網(wǎng)站會(huì)選擇更為“動(dòng)態(tài)”的方式,較為常見的方式有兩種:一種是動(dòng)態(tài)寫入或調(diào)整A標(biāo)簽,另一種是在用戶點(diǎn)擊的時(shí)候觸發(fā)事件改變默認(rèn)的鏈接打開方式。1.動(dòng)態(tài)寫入或調(diào)整鏈接標(biāo)簽抽象的說,網(wǎng)頁要實(shí)現(xiàn)這樣的效果,乃至后文描述的其它效果,與把大象放入冰箱極為類似,分為三步:找到要寫入/修改的目標(biāo)(找到大象),準(zhǔn)備好要寫入/修改的內(nèi)容(打開冰箱門),執(zhí)行寫入/修改(把它放進(jìn)去)。這三步操作映射到JavaScript上,就是先后調(diào)用三組標(biāo)準(zhǔn)的瀏覽器功能函數(shù):頁面元素定位、數(shù)據(jù)準(zhǔn)備以及頁面修改。那么,JavaScript解析的工作就是同樣提供出這樣的函數(shù),隨著被站長的JavaScript代碼調(diào)用自然的發(fā)現(xiàn)相應(yīng)的內(nèi)容和行為。分析至此,所需實(shí)現(xiàn)的函數(shù)也就基本確定了,其中較為簡單的包括:document.getElementById//定位document.getElementsByTagName//定位document.getElementsByClassName//定位node.[firstChild/nextSibling/previousSibling/parentNode]//定位document.[createElement/createTextNode]//創(chuàng)建鏈接node.[appendChild/insertBefore/innerHTML=?]//寫入內(nèi)容element.getAttribute,element.setAttribute//設(shè)置屬性element.href=?//設(shè)置屬性至于要寫入的內(nèi)容,可能是以數(shù)組等形式保存在JavaScript種,也可能是使用AJAX動(dòng)態(tài)加載。前者屬于JavaScript語言的內(nèi)置功能,此處不再復(fù)述;后者是一個(gè)單獨(dú)的話題,會(huì)在后文專門討論。2.點(diǎn)擊時(shí)觸發(fā)事件改變默認(rèn)的鏈接打開方式頁面這樣做的原因不一,有的是為了隱藏鏈接,有的是為了實(shí)現(xiàn)彈出窗口,有的則是為了程序拼接URL,還有的是做檢查看是否應(yīng)該打開鏈接等等。但所有這些原因都對應(yīng)著同樣的實(shí)現(xiàn)方法:添加click事件。添加click事件的方法有三種:1.將A標(biāo)簽的href屬性設(shè)置為“javascript:func(…)”的形式2.設(shè)置A標(biāo)簽的onclick屬性,設(shè)置為onclick=”js_code”的形式3.調(diào)用事件綁定函數(shù),如my_link_node.addEventListener('click',func,false)支持這三種方法本身是較為簡單的,需要注意的地方在于如何觸發(fā)這樣的click事件,以及如何在觸發(fā)之后截獲目的URL。對于觸發(fā)事件而言,首先需要收集到所有可能的click事件,而后再依次觸發(fā)。但對于每一個(gè)要觸發(fā)的click而言,實(shí)際觸發(fā)之前必須先檢查其是否還存在,這是由于在其之前的click事件很可能已經(jīng)把當(dāng)前這個(gè)click刪除掉了。要做到截獲URL,首先要實(shí)現(xiàn)相關(guān)的頁面跳轉(zhuǎn)函數(shù),既location.href=?,window.open等。而后通過設(shè)置一系列標(biāo)志,將本次點(diǎn)擊和頁面跳轉(zhuǎn)關(guān)連起來,如此也就得到了目標(biāo)URL。二、動(dòng)態(tài)頁面內(nèi)容頁面動(dòng)態(tài)內(nèi)容是一種提升頁面加載速度、增強(qiáng)網(wǎng)站技術(shù)靈活性的手段,可以將那些會(huì)改變的內(nèi)容(如評論、評分等)抽離,使頁面分為靜態(tài)和動(dòng)態(tài)兩部分:靜態(tài)內(nèi)容可以使用緩存等方法加快頁面顯示速度、降低網(wǎng)站流量;動(dòng)態(tài)內(nèi)容則有格式簡單好生成的優(yōu)勢,同時(shí)也能節(jié)省流量。另一方面,動(dòng)態(tài)內(nèi)容也是加載廣告和內(nèi)容作弊的重要方法,最常見的就是寫入iframe,這對于早期搜索引擎而言有極大的隱蔽性。在技術(shù)層次上,動(dòng)態(tài)頁面內(nèi)容所需要的工作與上一節(jié)“動(dòng)態(tài)寫入或調(diào)整A標(biāo)簽”在很大程度上是相同的,這里需要增加的是經(jīng)典的“document.write”方法。該方法是最早的JavaScript功能之一,用于向頁面直接寫入一段HTML代碼,至今仍在廣泛使用。對于該方法,早期的搜索引擎都有所支持,但方法基本限于字符匹配,僅能支持最直接的寫入一個(gè)JavaScript字符串的方式,對于稍微復(fù)雜的文本拼接顯得無能為力。但對于JavaScript解析而言,這段代碼終究是要符合語言規(guī)范的,因此就能做到完整支持,處理文本拼接、條件判斷和混淆代碼等各種情況。這里還需要討論的一點(diǎn)是嵌套的document.write,也就是通過document.write寫入一個(gè)SCRIPT標(biāo)簽,該標(biāo)簽內(nèi)部是另一段document.write。這類問題在跳轉(zhuǎn)作弊頁面中屢見不鮮,對其支持就不只需要JavaScript解析,還需要HTML解析器能夠支持處理嵌套的HTML寫入功能,這里就不加以分析了。通過上述方法,無論是網(wǎng)頁的主體信息,還是廣告或其它輔助信息,都會(huì)被暴露出來,從而更好的理解站長意圖。三、網(wǎng)頁跳轉(zhuǎn)網(wǎng)頁跳轉(zhuǎn)在有些情況下是達(dá)到頁面效果的必要選擇,但同樣會(huì)用于作弊。在技術(shù)上,多以下面兩種方式出現(xiàn):1.直接調(diào)用頁面跳轉(zhuǎn)函數(shù)2.針對搜索引擎的UA、referer等調(diào)用頁面跳轉(zhuǎn)函數(shù)這里要實(shí)現(xiàn)識(shí)別,最核心的就是實(shí)現(xiàn)頁面跳轉(zhuǎn)函數(shù):location對象。由于這是技術(shù)上唯一的JavaScript跳轉(zhuǎn)函數(shù),所以無論頁面的JavaScript如何撰寫如何混淆,最終都會(huì)調(diào)用該函數(shù)。因此,盡管不同頁面的跳轉(zhuǎn)代碼看上去五花八門,但識(shí)別出來卻是簡單的。四、關(guān)于AJAXAJAX是極為常見的網(wǎng)頁技術(shù),根本上說就是在網(wǎng)頁顯示期間,動(dòng)態(tài)的從互聯(lián)網(wǎng)上獲取一段數(shù)據(jù)(可能是HTML也可能是其它),經(jīng)過處理后加以顯示。對于該技術(shù),根本的工作并不在于XMLHttpRequest對象的實(shí)現(xiàn),而是在于對搜索引擎爬蟲架構(gòu)的影響。眾所周知,爬蟲抓取頁面,遍歷其鏈接,再依次抓取的形式設(shè)計(jì)的,其工作主要集中在調(diào)度和控制抓取壓力上,抓取器本身較為簡單,通常不具備抓取后即時(shí)執(zhí)行JavaScript并抓取AJAX數(shù)據(jù)的能力,因此需要技術(shù)升級方可支持AJAX。對抓取器的分析超出了本文的范圍,有興趣的讀者可以查看其它相關(guān)文獻(xiàn)??偨Y(jié)通過前面的案例分析,我們總結(jié)出了實(shí)現(xiàn)JavaScript解析所需要的基本工作,此外再增加一定的基礎(chǔ)性建設(shè)就能構(gòu)成一套較為完整的系統(tǒng)了。這里我們再次整理一下,將其分為三個(gè)部分:1.在HTML解析器中嵌入JavaScript語言引擎,語言引擎可以選擇V8、SpiderMonkey等成熟的開源方案。2.實(shí)現(xiàn)所需的功能函數(shù),具體可參考W3C的相關(guān)HTML和DOM規(guī)范。3.作為一個(gè)直接推論,需要收錄所謂的.js文件,這是JavaScript解析所需要“解析”的源代碼。本文中介紹的功能僅是一部分較為常見的JavaScript功能,要讓搜素引擎真正看到實(shí)際的頁面還需要進(jìn)一步實(shí)現(xiàn)其它需要的功能,此
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年地材供貨合同范本:高性能耐磨地材采購協(xié)議3篇
- 志愿者服務(wù)口號(hào)宣傳語
- 2024年度大宗貨物運(yùn)輸與供應(yīng)鏈管理服務(wù)合同3篇
- 2025年山東淄博文昌湖省級旅游度假區(qū)事業(yè)單位招聘教師11人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2024年度冷鏈物流代理合同中貨物滅損及病毒檢驗(yàn)協(xié)議3篇
- 2025年山東濟(jì)寧市衛(wèi)生健康委員會(huì)所屬事業(yè)單位“優(yōu)才”招聘歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東濟(jì)南新舊動(dòng)能轉(zhuǎn)換起步區(qū)管委會(huì)所屬事業(yè)單位招聘14人管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東濟(jì)南市市中區(qū)所屬事業(yè)單位招聘73人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東泰安新泰市中小學(xué)招聘教師歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東棗莊市文旅集團(tuán)第一批市場化招聘中層管理人員和業(yè)務(wù)骨干14人管理單位筆試遴選500模擬題附帶答案詳解
- 癲癇持續(xù)狀態(tài)
- 2024年甘肅省公務(wù)員錄用考試《行測》試題及答案解析
- 重點(diǎn)崗位崗應(yīng)急處置卡匯編
- 消防工程技術(shù)專業(yè)畢業(yè)實(shí)習(xí)報(bào)告范文
- 2024年高等教育法學(xué)類自考-00229證據(jù)法學(xué)考試近5年真題附答案
- 2024家裝行業(yè)簡析報(bào)告
- PLC入門課程課件
- 六年級下冊心理健康教育教案-8 男女生交往小鬧鐘遼大版
- 2024年貨運(yùn)叢業(yè)資格證考試題庫+答案
- 江西航空招聘筆試題庫2024
- 【課件】第五單元化學(xué)反應(yīng)的定量關(guān)系新版教材單元分析九年級化學(xué)人教版(2024)上冊
評論
0/150
提交評論