專利名稱:從網(wǎng)頁(yè)內(nèi)容中提取統(tǒng)一資源定位符的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)爬蟲(chóng)技術(shù),尤其涉及一種從網(wǎng)頁(yè)內(nèi)容中提取統(tǒng)一資源定位
符(URL, Uniform Resource Locator)的方法及系統(tǒng)。
背景技術(shù):
網(wǎng)絡(luò)爬蟲(chóng)是一個(gè)自動(dòng)提取網(wǎng)頁(yè)的程序,它為搜索引擎從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè), 是搜索引擎的重要組成。目前, 一般網(wǎng)絡(luò)爬蟲(chóng)的做法都是從需要檢測(cè)的網(wǎng)頁(yè)站 點(diǎn)URL開(kāi)始,抓取該URL的網(wǎng)頁(yè)內(nèi)容,之后對(duì)當(dāng)前抓取的網(wǎng)頁(yè)內(nèi)容進(jìn)行解析, 并獲取新的網(wǎng)頁(yè)站點(diǎn)URL放入U(xiǎn)RL隊(duì)列中,循環(huán)執(zhí)行上述步驟直到滿足一定 的條件,如設(shè)定的要獲取的URL數(shù)量等。
然而,現(xiàn)有技術(shù)中網(wǎng)絡(luò)爬蟲(chóng)在解析網(wǎng)頁(yè)內(nèi)容過(guò)程中只能提取iframe、 fmmeset、 a等頁(yè)面標(biāo)簽的URL,并不能執(zhí)行腳本語(yǔ)句,從而獲取不到腳本語(yǔ)句 產(chǎn)生網(wǎng)頁(yè)站點(diǎn)重定向的目標(biāo)URL、或腳本語(yǔ)句動(dòng)態(tài)生成的網(wǎng)頁(yè)內(nèi)容,導(dǎo)致網(wǎng)絡(luò) 爬蟲(chóng)獲取到的URL數(shù)量受到限制。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種從網(wǎng)頁(yè)內(nèi)容中提取統(tǒng)一資源定 位符的方法及系統(tǒng),能夠執(zhí)行腳本語(yǔ)句,獲取更多數(shù)量的URL。 為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的
本發(fā)明提供一種從網(wǎng)頁(yè)內(nèi)容中提取統(tǒng)一資源定位符URL的方法,包括以下 步驟
A、 根據(jù)URL下載并解析網(wǎng)頁(yè)內(nèi)容,生成包含腳本隊(duì)列和URL隊(duì)列的第L 級(jí)文檔對(duì)象模型DOM樹(shù)節(jié)點(diǎn),其中L大于等于l;
B、 遍歷第L級(jí)DOM樹(shù)節(jié)點(diǎn)中存儲(chǔ)的腳本,將非可執(zhí)行腳本轉(zhuǎn)換為可執(zhí)行腳本;
C、 編譯、執(zhí)行可執(zhí)行腳本,將執(zhí)行可執(zhí)行腳本獲得的新的腳本和URL分 別存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的腳本隊(duì)列和URL隊(duì)列中。
該方法進(jìn)一步包括
D、 判斷是否遍歷完第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的所有腳本,若否,則提取第L 級(jí)DOM樹(shù)節(jié)點(diǎn)中腳本隊(duì)列中的下一個(gè)腳本,返回步驟B;若是,則執(zhí)行步驟E;
E、 判斷L是否等于設(shè)定值N,其中N大于等于l,若等于,則執(zhí)行步驟F; 若不等于,則提取第L級(jí)DOM樹(shù)節(jié)點(diǎn)中URL隊(duì)列中的URL, L自加l,返回 步驟A;
F、 判斷L減l是否等于O,若等于,則結(jié)束提取URL過(guò)程;若不等于, 則L自減1,并執(zhí)行步驟G;
G、 判斷是否遍歷完第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的所有URL,若是,則返回步 驟F;若不等于,則提取第L級(jí)DOM樹(shù)節(jié)點(diǎn)中URL隊(duì)列中的下一個(gè)URL, L 自加I,返回步驟A。
上述技術(shù)方案中,所述步驟B具體包括 Bl、遍歷第L級(jí)DOM樹(shù)節(jié)點(diǎn)中存儲(chǔ)的腳本; B2、判斷腳本是否為可執(zhí)行腳本,若是,則執(zhí)行步驟C,若不是,則將非 可執(zhí)行腳本轉(zhuǎn)化為可執(zhí)行腳本,然后執(zhí)行步驟C。 所述步驟C具體包括 CH、編譯、執(zhí)行可執(zhí)行腳本;
C12、判斷可執(zhí)行腳本是否動(dòng)態(tài)生成了網(wǎng)頁(yè)內(nèi)容,若是,則解析該網(wǎng)頁(yè)內(nèi) 容,將獲得的新的腳本和URL分別存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的腳本隊(duì)列和 URL隊(duì)列中,然后執(zhí)行步驟D;若否,則執(zhí)行步驟C13;
C13、判斷可執(zhí)行腳本中是否包含重定向語(yǔ)句,若是,則將重定向的URL 存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的URL隊(duì)列中,然后執(zhí)行步驟D;若否,則執(zhí)行步 驟D;
或者,所述步驟C具體包括C21、編譯、執(zhí)行可執(zhí)行腳本;
C22、判斷可執(zhí)行腳本中是否包含重定向語(yǔ)句,若是,則將重定向的URL 存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的URL隊(duì)列中,然后執(zhí)行步驟D;若否,則執(zhí)行步 驟C23;
C23、判斷可執(zhí)行腳本是否動(dòng)態(tài)生成了網(wǎng)頁(yè)內(nèi)容,若是,則解析該網(wǎng)頁(yè)內(nèi) 容,將獲得的新的腳本和URL分別存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的腳本隊(duì)列和 URL隊(duì)列中,然后執(zhí)行步驟D;若否,則執(zhí)行步驟D。
上述技術(shù)方案中,該方法采用js執(zhí)行引擎spidermonkey;所述可執(zhí)行腳本 為js腳本,所述非可執(zhí)行腳本為vbscript腳本和/或JScript.Encode腳本。
本發(fā)明還提供一種從網(wǎng)頁(yè)內(nèi)容中提取URL的系統(tǒng),該系統(tǒng)包括下載網(wǎng)頁(yè) 內(nèi)容模塊、解析網(wǎng)頁(yè)內(nèi)容模塊、解碼腳本模塊及腳本執(zhí)行模塊;其中,
下載網(wǎng)頁(yè)內(nèi)容模塊,用于根據(jù)URL下載網(wǎng)頁(yè)內(nèi)容,并將下載的網(wǎng)頁(yè)內(nèi)容發(fā) 送給解析網(wǎng)頁(yè)內(nèi)容模塊;
解析網(wǎng)頁(yè)內(nèi)容模塊,用于解析收到的網(wǎng)頁(yè)內(nèi)容,生成包含腳本隊(duì)列和URL 隊(duì)列的DOM樹(shù)節(jié)點(diǎn);
解碼腳本模塊,用于遍歷所述DOM樹(shù)節(jié)點(diǎn)中腳本,將DOM樹(shù)節(jié)點(diǎn)中的
非可執(zhí)行腳本轉(zhuǎn)換為可執(zhí)行腳本,并發(fā)送給腳本執(zhí)行模塊;
腳本執(zhí)行模塊,用于編譯、執(zhí)行可執(zhí)行腳本,將執(zhí)行腳本后獲得的新腳本 和/或URL存入當(dāng)前DOM樹(shù)節(jié)點(diǎn)中的腳本隊(duì)列和/或URL隊(duì)列中。
上述技術(shù)方案中,所述腳本執(zhí)行模塊采用js執(zhí)行引擎spidermonkey;所述 可執(zhí)行腳本為js腳本;所述非可執(zhí)行腳本為vbscript腳本和/或JScript.Encode 腳本。
與現(xiàn)有技術(shù)相比,本發(fā)明從網(wǎng)頁(yè)內(nèi)容中提取統(tǒng)一資源定位符的方法及系統(tǒng), 通過(guò)增加腳本執(zhí)行引擎來(lái)編譯、執(zhí)行腳本語(yǔ)句,在獲取iframe、 frameset、 a等 頁(yè)面標(biāo)簽的URL的基礎(chǔ)上,還可獲取腳本語(yǔ)句產(chǎn)生網(wǎng)頁(yè)站點(diǎn)重定向的URL, 或進(jìn)一步通過(guò)解析腳本動(dòng)態(tài)生成的網(wǎng)頁(yè)內(nèi)容獲取新的URL,從而增加了可獲取 的URL的數(shù)量。
圖1為本發(fā)明從網(wǎng)頁(yè)內(nèi)容中提取URL的系統(tǒng)結(jié)構(gòu)示意圖2為本發(fā)明從網(wǎng)頁(yè)內(nèi)容中提取URL方法的實(shí)現(xiàn)流程示意圖3為本發(fā)明編譯、執(zhí)行可執(zhí)行腳本步驟的具體流程示意圖4為本發(fā)明實(shí)施例從網(wǎng)頁(yè)內(nèi)容中提取URL方法的實(shí)現(xiàn)流程示意圖。
具體實(shí)施例方式
本發(fā)明的基本思想是通過(guò)增加腳本執(zhí)行引擎來(lái)編譯、執(zhí)行腳本語(yǔ)句,在 獲取iframe、 frameset、 a等頁(yè)面標(biāo)簽的URL的基礎(chǔ)上,還可獲取腳本語(yǔ)句產(chǎn)生 網(wǎng)頁(yè)站點(diǎn)重定向的URL,或進(jìn)一步通過(guò)解析腳本動(dòng)態(tài)生成的網(wǎng)頁(yè)內(nèi)容獲取新的 URL,從而增加可獲取URL的數(shù)量。
圖1為本發(fā)明從網(wǎng)頁(yè)內(nèi)容中提取URL的系統(tǒng)結(jié)構(gòu)示意圖,該系統(tǒng)可設(shè)置于 終端,如圖1所示,該系統(tǒng)包括下載網(wǎng)頁(yè)內(nèi)容模塊110、解析網(wǎng)頁(yè)內(nèi)容模塊 120、解碼腳本模塊130及腳本執(zhí)行模塊140;其中,
下載網(wǎng)頁(yè)內(nèi)容模塊IIO,用于根據(jù)URL下載網(wǎng)頁(yè)內(nèi)容,并將下載的網(wǎng)頁(yè)內(nèi) 容發(fā)送給解析網(wǎng)頁(yè)內(nèi)容模塊120;
解析網(wǎng)頁(yè)內(nèi)容模塊120,用于解析收到的網(wǎng)頁(yè)內(nèi)容,生成包含腳本隊(duì)列和 URL隊(duì)列的文檔對(duì)象模型(DOM, Document Object Model)樹(shù)節(jié)點(diǎn);
解碼腳本模塊130,用于遍歷所述DOM樹(shù)節(jié)點(diǎn)中腳本,將DOM樹(shù)節(jié)點(diǎn)中 的非可執(zhí)行腳本轉(zhuǎn)換為可執(zhí)行腳本,并發(fā)送給腳本執(zhí)行模塊14進(jìn)行編譯、執(zhí)行。
腳本執(zhí)行模塊140,用于編譯、執(zhí)行可執(zhí)行腳本,將執(zhí)行腳本后獲得的新 腳本和/或URL,存入當(dāng)前DOM樹(shù)節(jié)點(diǎn)中的腳本隊(duì)列和/或URL隊(duì)列中。
本發(fā)明中,所述腳本執(zhí)行模塊140可釆用javascript執(zhí)行引擎spidermonkey, 其中j avascript簡(jiǎn)稱j s 。
具體的,所述下載網(wǎng)頁(yè)內(nèi)容模塊110,根據(jù)URL從互聯(lián)網(wǎng)中下載網(wǎng)頁(yè)內(nèi)容, 支持http和https兩種網(wǎng)頁(yè)協(xié)議。該下載網(wǎng)頁(yè)內(nèi)容模塊110提供與服務(wù)器之間的 連接、發(fā)送請(qǐng)求、接收數(shù)據(jù)這些基本功能,并為請(qǐng)求頭信息中的每一個(gè)屬性提供一個(gè)接口,通過(guò)這些接口可以設(shè)置相應(yīng)屬性的值,如對(duì)請(qǐng)求包中的cookie字 段賦值,如此,使得網(wǎng)頁(yè)站點(diǎn)服務(wù)器端可以驗(yàn)證此次連接的用戶認(rèn)證信息。
該下載網(wǎng)頁(yè)內(nèi)容模塊110還通過(guò)解析響應(yīng)頭信息,獲取響應(yīng)狀態(tài)碼信息, 根據(jù)狀態(tài)碼值做進(jìn)一步的操作,例如,當(dāng)狀態(tài)碼為重定向代碼301、 302時(shí),則 再次根據(jù)重定向的URL下載網(wǎng)頁(yè)內(nèi)容。
所述解析網(wǎng)頁(yè)內(nèi)容模塊120,遍歷掃描整個(gè)網(wǎng)頁(yè)內(nèi)容中的每個(gè)字符,依據(jù) html規(guī)范(參見(jiàn)"W3C HTML 4.01 Specification")獲得可用于獲取URL鏈接 的腳本、link、 form、 frame、 iframe、 meta等頁(yè)面標(biāo)簽,取得這些頁(yè)面標(biāo)簽的 src屬性、屬性值和標(biāo)簽內(nèi)容,生成包含腳本隊(duì)列和URL對(duì)象隊(duì)列的DOM樹(shù) 節(jié)點(diǎn),其中,URL對(duì)象指Iink、 form、 frame、 iframe、 meta等頁(yè)面標(biāo)簽,對(duì)于 那些不能用于獲取URL的標(biāo)簽,則省略對(duì)它們的屬性、屬性值的內(nèi)容解析。
然后,遍歷URL對(duì)象隊(duì)列的每個(gè)成員,掃描這些成員的src屬性值,獲得 其對(duì)應(yīng)的URL,生成URL隊(duì)列。
所述解碼腳本模塊130,遍歷DOM樹(shù)節(jié)點(diǎn)中腳本隊(duì)列的每個(gè)腳本,將DOM 樹(shù)節(jié)點(diǎn)中的非可執(zhí)行腳本轉(zhuǎn)換為可執(zhí)行腳本,并發(fā)送給腳本執(zhí)行模塊140進(jìn)行 編譯、執(zhí)行。
若腳本執(zhí)行模塊140釆用js執(zhí)行引擎spidermonkey,則其只能編譯、執(zhí)行 js腳本,因此如果腳本為JScript.Encode、 vbscript等類型時(shí),解碼腳本模塊130 必須將其內(nèi)容轉(zhuǎn)換為js代碼。
對(duì)于vbscript,目前并沒(méi)有可利用的轉(zhuǎn)換代碼、工具將其轉(zhuǎn)換為js腳本, 本發(fā)明參考vbscirpt、 js語(yǔ)法手冊(cè)(參見(jiàn)"Microsoft VBScript Language Reference"、 "JavaScript Manual"),釆用yacc、 lex對(duì)vbscript腳本的詞法、語(yǔ)法進(jìn)行解析, 將其轉(zhuǎn)換為與javascript對(duì)應(yīng)的功能 一致的關(guān)鍵字、函數(shù)和語(yǔ)法形式。
對(duì)于JScript.Encode,通過(guò)釆用微軟提供的腳本編碼語(yǔ)法(參見(jiàn)"Microsoft Script Encoder Syntax"),順序遍歷編碼內(nèi)容直接將其轉(zhuǎn)換為js代碼。
所述腳本執(zhí)行模塊140,用于編譯、執(zhí)行可執(zhí)行腳本,提取URL、網(wǎng)頁(yè)內(nèi) 容。若該腳本執(zhí)行模塊140采用firefox的js執(zhí)行引擎spidermonkey(參見(jiàn)"MozillaSpiderMonkey ( JavaScript-C ) Engine"),則只能編譯、執(zhí)行js腳本。該引擎先 對(duì)js語(yǔ)句進(jìn)行編碼轉(zhuǎn)換、解密;然后編譯、執(zhí)行。在執(zhí)行js腳本之前,需先定 義js腳本中要引用的window、 document、 location等多個(gè)全局對(duì)象,當(dāng)js語(yǔ)句 調(diào)用這些全局對(duì)象的函數(shù)、屬性時(shí),js執(zhí)行引擎spidermonkey將會(huì)執(zhí)行自定義 的函數(shù)、屬性,如當(dāng)js語(yǔ)句調(diào)用了 document對(duì)象的write函數(shù)動(dòng)態(tài)生成網(wǎng)頁(yè) 時(shí),自定義的函數(shù)將會(huì)獲取網(wǎng)頁(yè)內(nèi)容,為解析網(wǎng)頁(yè)內(nèi)容模塊做下一步的內(nèi)容解 析。此外,還可獲取js語(yǔ)句頁(yè)面重定向的最終URL;當(dāng)js語(yǔ)句對(duì)location對(duì)象 的href屬性進(jìn)行賦值時(shí),則可以通過(guò)自定義對(duì)應(yīng)函數(shù)獲取重定向的URL,將這 些URL加入到URL隊(duì)列中。
圖2為本發(fā)明從網(wǎng)頁(yè)內(nèi)容中提取URL方法的實(shí)現(xiàn)流程示意圖,如圖2所示, 該方法包括以下步驟
步驟l、根據(jù)URL下載并解析網(wǎng)頁(yè)內(nèi)容,生成包含腳本隊(duì)列和URL隊(duì)列 的第L級(jí)DOM樹(shù)節(jié)點(diǎn),其中L大于等于1;
本步驟中,根據(jù)客戶端提供的初始URL進(jìn)行網(wǎng)頁(yè)內(nèi)容的首次下載,生成包 含腳本隊(duì)列和URL隊(duì)列的第1級(jí)DOM樹(shù)節(jié)點(diǎn);
步驟2、遍歷第L級(jí)DOM樹(shù)節(jié)點(diǎn)中存儲(chǔ)的腳本,將非可執(zhí)行腳本轉(zhuǎn)化為 可執(zhí)行腳本;
步驟3、編譯、執(zhí)行可執(zhí)行腳本,將執(zhí)行可執(zhí)行腳本獲得的新的腳本和/或 URL,分別存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的腳本隊(duì)列和/或URL隊(duì)列中;
步驟4、判斷是否遍歷完第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的所有腳本,若是,則執(zhí) 行步驟5,否則,提取第L級(jí)DOM樹(shù)節(jié)點(diǎn)中腳本隊(duì)列中的下一個(gè)腳本,返回 步驟2;
步驟5、判斷L是否等于設(shè)定值N,其中N大于等于l,若等于,則執(zhí)行 步驟6;若不等于,則提取第L級(jí)DOM樹(shù)節(jié)點(diǎn)中URL隊(duì)列中的URL, L自加 1,返回步驟l;
本步驟中,可預(yù)先設(shè)置預(yù)定值N來(lái)限定遞歸層次數(shù)目;
步驟6、判斷L減1是否等于0,若等于,則結(jié)束提取URL過(guò)程;若不等于,則L自減1,并執(zhí)行步驟7;
步驟7、判斷是否遍歷完第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的所有URL,若遍歷完, 則返回步驟6;若未遍歷完,則提取第L級(jí)DOM樹(shù)節(jié)點(diǎn)中URL隊(duì)列中的下一 個(gè)URL, L自力口l,返回步驟l。
上述技術(shù)方案中,步驟2具體包括
步驟21、遍歷第L級(jí)DOM樹(shù)節(jié)點(diǎn)中存儲(chǔ)的腳本;
步驟22、判斷當(dāng)前遍歷到的腳本是否為可執(zhí)行腳本,若是,則執(zhí)行步驟3, 若否,執(zhí)行步驟23;
步驟23、將非可執(zhí)行腳本轉(zhuǎn)化為可執(zhí)行腳本,然后執(zhí)行步驟3。
圖3為本發(fā)明編譯、執(zhí)行可執(zhí)行腳本步驟的具體流程示意圖,如圖3所示, 本發(fā)明編譯、執(zhí)行可執(zhí)行腳本的步驟具體包括
步驟31、編譯、執(zhí)行可執(zhí)行腳本;
步驟32、判斷可執(zhí)行腳本是否動(dòng)態(tài)生成了網(wǎng)頁(yè)內(nèi)容,若生成,則解析所生 成的網(wǎng)頁(yè)內(nèi)容,將獲得的新的腳本和/或URL分別存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中 的腳本隊(duì)列和/或URL隊(duì)列中,然后執(zhí)行步驟4;若未生成,則執(zhí)行步驟33;
步驟33、判斷可執(zhí)行腳本中是否包含重定向語(yǔ)句,若包含,則將重定向的 URL存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的URL隊(duì)列中,然后執(zhí)行步驟4;若未包含, 則執(zhí)行步驟4;
其中,步驟32和步驟33的順序可以調(diào)換。
下面結(jié)合附圖及具體實(shí)施例詳細(xì)說(shuō)明本發(fā)明從網(wǎng)頁(yè)內(nèi)容中提取URL方法 的實(shí)現(xiàn)。
圖4為本發(fā)明實(shí)施例從網(wǎng)頁(yè)內(nèi)容中提取URL方法的實(shí)現(xiàn)流程示意圖,本實(shí) 施例中,采用firefox的js執(zhí)行引擎spidermonkey,所以本實(shí)施例中可執(zhí)行腳本 為js腳本,相應(yīng)的,在遍歷時(shí)需將非js腳本轉(zhuǎn)換為js腳本,以供后續(xù)執(zhí)行。 如圖4所示,本發(fā)明從網(wǎng)頁(yè)內(nèi)容中提取URL的方法包括以下步驟 步驟IO、根據(jù)URL下載并解析網(wǎng)頁(yè)內(nèi)容,生成包含腳本隊(duì)列和URL隊(duì)列 的第L級(jí)DOM樹(shù)節(jié)點(diǎn),其中L大于等于1;步驟ll、遍歷第L級(jí)DOM樹(shù)節(jié)點(diǎn)中存儲(chǔ)的腳本,將非js腳本轉(zhuǎn)換為js 腳本,然后編譯、執(zhí)行js腳本;
本步驟中,包括判斷該腳本是否為js腳本,若不是,則將非js腳本轉(zhuǎn)化 為js腳本,然后編譯、執(zhí)行js腳本;
本步驟中,需先定義html頁(yè)面中的location 、 window 、 document等全局對(duì) 象,以便當(dāng)執(zhí)行js腳本時(shí),js執(zhí)行引擎spidermonkey會(huì)調(diào)用這些全局對(duì)象的自 定義函數(shù)和屬性;
本實(shí)施例中,非js腳本為vbscript腳本、JScript.Encode腳本;
步驟12、判斷js腳本是否動(dòng)態(tài)生成了網(wǎng)頁(yè)內(nèi)容,若生成,則解析生成的網(wǎng) 頁(yè)內(nèi)容,將獲得的新的腳本和URL分別存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的腳本隊(duì)列 和URL隊(duì)列中,然后執(zhí)行步驟14;若未生成,則執(zhí)行步驟13;
步驟13、判斷js腳本中是否包含重定向語(yǔ)句,若包含,則將重定向的URL 存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的URL隊(duì)列中,然后執(zhí)行步驟14;若未包含,則 執(zhí)行步驟14;
其中,步驟12和步驟13的順序可以調(diào)換
步驟14、判斷是否遍歷完第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的所有腳本,若是,則執(zhí) 行步驟15,否則,提取第L級(jí)DOM樹(shù)節(jié)點(diǎn)中腳本隊(duì)列中的下一個(gè)腳本,返回 步驟ll;
步驟15、判斷L是否等于設(shè)定值N,其中N大于等于l,若等于,則執(zhí)行 步驟16;若不等于,則提取第L級(jí)DOM樹(shù)節(jié)點(diǎn)中URL隊(duì)列中的URL, L自 加1,返回步驟10;
步驟16、判斷L減1是否等于0,若等于,則結(jié)東提取URL過(guò)程;若不 等于,則L自減1,并執(zhí)行步驟17;
步驟17、判斷是否遍歷完第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的所有URL,若遍歷完, 則返回步驟16;若未遍歷完,則提取第L級(jí)DOM樹(shù)節(jié)點(diǎn)中URL隊(duì)列中的下 一個(gè)URL, L自加l,返回步驟IO。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。
權(quán)利要求
1、一種從網(wǎng)頁(yè)內(nèi)容中提取統(tǒng)一資源定位符URL的方法,其特征在于,包括以下步驟A、根據(jù)URL下載并解析網(wǎng)頁(yè)內(nèi)容,生成包含腳本隊(duì)列和URL隊(duì)列的第L級(jí)文檔對(duì)象模型DOM樹(shù)節(jié)點(diǎn),其中L大于等于1;B、遍歷第L級(jí)DOM樹(shù)節(jié)點(diǎn)中存儲(chǔ)的腳本,將非可執(zhí)行腳本轉(zhuǎn)換為可執(zhí)行腳本;C、編譯、執(zhí)行可執(zhí)行腳本,將執(zhí)行可執(zhí)行腳本獲得的新的腳本和URL分別存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的腳本隊(duì)列和URL隊(duì)列中。
2、 根據(jù)權(quán)利要求1所述的從網(wǎng)頁(yè)內(nèi)容中提取URL的方法,其特征在于,該方法進(jìn)一步包括D、 判斷是否遍歷完第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的所有腳本,若否,則提取第L 級(jí)DOM樹(shù)節(jié)點(diǎn)中腳本隊(duì)列中的下一個(gè)腳本,返回步驟B;若是,則執(zhí)行步驟E;E、 判斷L是否等于設(shè)定值N,其中N大于等于1,若等于,則執(zhí)行步驟F; 若不等于,則提取第L級(jí)DOM樹(shù)節(jié)點(diǎn)中URL隊(duì)列中的URL, L自加l,返回 步驟A;F、 判斷L減l是否等于O,若等于,則結(jié)束提取URL過(guò)程;若不等于, 則L自減1,并執(zhí)行步驟G;G、 判斷是否遍歷完第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的所有URL,若是,則返回步 驟F;若不等于,則提取第L級(jí)DOM樹(shù)節(jié)點(diǎn)中URL隊(duì)列中的下一個(gè)URL, L 自加1,返回步驟A。
3、 根據(jù)權(quán)利要求2所述的從網(wǎng)頁(yè)內(nèi)容中提取URL的方法,其特征在于, 所述步驟B具體包括Bl、遍歷第L級(jí)DOM樹(shù)節(jié)點(diǎn)中存儲(chǔ)的腳本;B2、判斷腳本是否為可執(zhí)行腳本,若是,則執(zhí)行步驟C,若不是,則將非 可執(zhí)行腳本轉(zhuǎn)化為可執(zhí)行腳本,然后執(zhí)行步驟C。
4、 根據(jù)權(quán)利要求3所述的從網(wǎng)頁(yè)內(nèi)容中提取URL的方法,其特征在于, 所述步驟C具體包括Cll、編譯、執(zhí)行可執(zhí)行腳本;C12、判斷可執(zhí)行腳本是否動(dòng)態(tài)生成了網(wǎng)頁(yè)內(nèi)容,若是,則解析該網(wǎng)頁(yè)內(nèi) 容,將獲得的新的腳本和URL分別存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的腳本隊(duì)列和 URL隊(duì)列中,然后執(zhí)行步驟D;若否,則執(zhí)行步驟C13;C13、判斷可執(zhí)行腳本中是否包含重定向語(yǔ)句,若是,則將重定向的URL 存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的URL隊(duì)列中,然后執(zhí)行步驟D;若否,則執(zhí)行步 驟D;或者,所述步驟C具體包括 C21、編譯、執(zhí)行可執(zhí)行腳本;C22、判斷可執(zhí)行腳本中是否包含重定向語(yǔ)句,若是,則將重定向的URL 存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的URL隊(duì)列中,然后執(zhí)行步驟D;若否,則執(zhí)行步 驟C23;C23、判斷可執(zhí)行腳本是否動(dòng)態(tài)生成了網(wǎng)頁(yè)內(nèi)容,若是,則解析該網(wǎng)頁(yè)內(nèi) 容,將獲得的新的腳本和URL分別存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的腳本隊(duì)列和 URL隊(duì)列中,然后執(zhí)行步驟D;若否,則執(zhí)行步驟D。
5、 根據(jù)權(quán)利要求4所述的從網(wǎng)頁(yè)內(nèi)容中提取URL的方法,其特征在于, 該方法采用js執(zhí)行引擎spideraionkey。
6、 根據(jù)權(quán)利要求5所述的從網(wǎng)頁(yè)內(nèi)容中提取URL的方法,其特征在于, 所述可執(zhí)行腳本為js腳本,所述非可執(zhí)行腳本為vbscript腳本和/或 JScript.Encode腳本。
7、 一種從網(wǎng)頁(yè)內(nèi)容中提取URL的系統(tǒng),其特征在于,該系統(tǒng)包括下載 網(wǎng)頁(yè)內(nèi)容模塊、解析網(wǎng)頁(yè)內(nèi)容模塊、解碼腳本模塊及腳本執(zhí)行模塊;其中,下載網(wǎng)頁(yè)內(nèi)容模塊,用于根據(jù)URL下載網(wǎng)頁(yè)內(nèi)容,并將下載的網(wǎng)頁(yè)內(nèi)容發(fā) 送給解析網(wǎng)頁(yè)內(nèi)容模塊;解析網(wǎng)頁(yè)內(nèi)容模塊,用于解析收到的網(wǎng)頁(yè)內(nèi)容,生成包含腳本隊(duì)列和URL隊(duì)列的DOM樹(shù)節(jié)點(diǎn);解碼腳本模塊,用于遍歷所述DOM樹(shù)節(jié)點(diǎn)中腳本,將DOM樹(shù)節(jié)點(diǎn)中的非可執(zhí)行腳本轉(zhuǎn)換為可執(zhí)行腳本,并發(fā)送給腳本執(zhí)行模塊;腳本執(zhí)行模塊,用于編譯、執(zhí)行可執(zhí)行腳本,將執(zhí)行腳本后獲得的新腳本 和/或URL存入當(dāng)前DOM樹(shù)節(jié)點(diǎn)中的腳本隊(duì)列和/或URL隊(duì)列中。
8、 根據(jù)權(quán)利要求7所述的從網(wǎng)頁(yè)內(nèi)容中提取URL的系統(tǒng),其特征在于, 所述腳本執(zhí)行模塊采用js執(zhí)行引擎spidermonkey。
9、 根據(jù)權(quán)利要求8所述的從網(wǎng)頁(yè)內(nèi)容中提取URL的系統(tǒng),其特征在于, 所述可執(zhí)行腳本為js腳本;所述非可執(zhí)行腳本為vbscHpt腳本和/或 JScript.Encode腳本。
全文摘要
本發(fā)明提供一種從網(wǎng)頁(yè)內(nèi)容中提取統(tǒng)一資源定位符的方法,包括A.根據(jù)統(tǒng)一資源定位符(URL)下載并解析網(wǎng)頁(yè)內(nèi)容,生成包含腳本隊(duì)列和URL隊(duì)列的第L級(jí)文檔對(duì)象模型(DOM)樹(shù)節(jié)點(diǎn),其中L大于等于1;B.遍歷第L級(jí)DOM樹(shù)節(jié)點(diǎn)中存儲(chǔ)的腳本,將非可執(zhí)行腳本轉(zhuǎn)換為可執(zhí)行腳本;C.編譯、執(zhí)行可執(zhí)行腳本,將執(zhí)行可執(zhí)行腳本獲得的新的腳本和URL分別存入第L級(jí)DOM樹(shù)節(jié)點(diǎn)中的腳本隊(duì)列和URL隊(duì)列中。本發(fā)明還提供了一種從網(wǎng)頁(yè)內(nèi)容中提取統(tǒng)一資源定位符的系統(tǒng)。本發(fā)明的方法和系統(tǒng),能夠執(zhí)行腳本,解析腳本動(dòng)態(tài)生成的網(wǎng)頁(yè)內(nèi)容以及獲取腳本語(yǔ)句產(chǎn)生網(wǎng)頁(yè)站點(diǎn)重定向的URL。
文檔編號(hào)G06F17/30GK101520796SQ20091000906
公開(kāi)日2009年9月2日 申請(qǐng)日期2009年2月16日 優(yōu)先權(quán)日2009年2月16日
發(fā)明者張海清, 李旬保, 林世飛, 歡 陳 申請(qǐng)人:深圳市騰訊計(jì)算機(jī)系統(tǒng)有限公司