国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      從網(wǎng)頁內(nèi)容中提取統(tǒng)一資源定位符的方法及系統(tǒng)的制作方法

      文檔序號:6480924閱讀:705來源:國知局
      專利名稱:從網(wǎng)頁內(nèi)容中提取統(tǒng)一資源定位符的方法及系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及網(wǎng)絡(luò)爬蟲技術(shù),尤其涉及一種從網(wǎng)頁內(nèi)容中提取統(tǒng)一資源定位
      符(URL, Uniform Resource Locator)的方法及系統(tǒng)。
      背景技術(shù)
      網(wǎng)絡(luò)爬蟲是一個(gè)自動(dòng)提取網(wǎng)頁的程序,它為搜索引擎從萬維網(wǎng)上下載網(wǎng)頁, 是搜索引擎的重要組成。目前, 一般網(wǎng)絡(luò)爬蟲的做法都是從需要檢測的網(wǎng)頁站 點(diǎn)URL開始,抓取該URL的網(wǎng)頁內(nèi)容,之后對當(dāng)前抓取的網(wǎng)頁內(nèi)容進(jìn)行解析, 并獲取新的網(wǎng)頁站點(diǎn)URL放入U(xiǎn)RL隊(duì)列中,循環(huán)執(zhí)行上述步驟直到滿足一定 的條件,如設(shè)定的要獲取的URL數(shù)量等。
      然而,現(xiàn)有技術(shù)中網(wǎng)絡(luò)爬蟲在解析網(wǎng)頁內(nèi)容過程中只能提取iframe、 fmmeset、 a等頁面標(biāo)簽的URL,并不能執(zhí)行腳本語句,從而獲取不到腳本語句 產(chǎn)生網(wǎng)頁站點(diǎn)重定向的目標(biāo)URL、或腳本語句動(dòng)態(tài)生成的網(wǎng)頁內(nèi)容,導(dǎo)致網(wǎng)絡(luò) 爬蟲獲取到的URL數(shù)量受到限制。

      發(fā)明內(nèi)容
      有鑒于此,本發(fā)明的主要目的在于提供一種從網(wǎng)頁內(nèi)容中提取統(tǒng)一資源定 位符的方法及系統(tǒng),能夠執(zhí)行腳本語句,獲取更多數(shù)量的URL。 為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的
      本發(fā)明提供一種從網(wǎng)頁內(nèi)容中提取統(tǒng)一資源定位符URL的方法,包括以下 步驟
      A、 根據(jù)URL下載并解析網(wǎng)頁內(nèi)容,生成包含腳本隊(duì)列和URL隊(duì)列的第L 級文檔對象模型DOM樹節(jié)點(diǎn),其中L大于等于l;
      B、 遍歷第L級DOM樹節(jié)點(diǎn)中存儲的腳本,將非可執(zhí)行腳本轉(zhuǎn)換為可執(zhí)行腳本;
      C、 編譯、執(zhí)行可執(zhí)行腳本,將執(zhí)行可執(zhí)行腳本獲得的新的腳本和URL分 別存入第L級DOM樹節(jié)點(diǎn)中的腳本隊(duì)列和URL隊(duì)列中。
      該方法進(jìn)一步包括
      D、 判斷是否遍歷完第L級DOM樹節(jié)點(diǎn)中的所有腳本,若否,則提取第L 級DOM樹節(jié)點(diǎn)中腳本隊(duì)列中的下一個(gè)腳本,返回步驟B;若是,則執(zhí)行步驟E;
      E、 判斷L是否等于設(shè)定值N,其中N大于等于l,若等于,則執(zhí)行步驟F; 若不等于,則提取第L級DOM樹節(jié)點(diǎn)中URL隊(duì)列中的URL, L自加l,返回 步驟A;
      F、 判斷L減l是否等于O,若等于,則結(jié)束提取URL過程;若不等于, 則L自減1,并執(zhí)行步驟G;
      G、 判斷是否遍歷完第L級DOM樹節(jié)點(diǎn)中的所有URL,若是,則返回步 驟F;若不等于,則提取第L級DOM樹節(jié)點(diǎn)中URL隊(duì)列中的下一個(gè)URL, L 自加I,返回步驟A。
      上述技術(shù)方案中,所述步驟B具體包括 Bl、遍歷第L級DOM樹節(jié)點(diǎn)中存儲的腳本; B2、判斷腳本是否為可執(zhí)行腳本,若是,則執(zhí)行步驟C,若不是,則將非 可執(zhí)行腳本轉(zhuǎn)化為可執(zhí)行腳本,然后執(zhí)行步驟C。 所述步驟C具體包括 CH、編譯、執(zhí)行可執(zhí)行腳本;
      C12、判斷可執(zhí)行腳本是否動(dòng)態(tài)生成了網(wǎng)頁內(nèi)容,若是,則解析該網(wǎng)頁內(nèi) 容,將獲得的新的腳本和URL分別存入第L級DOM樹節(jié)點(diǎn)中的腳本隊(duì)列和 URL隊(duì)列中,然后執(zhí)行步驟D;若否,則執(zhí)行步驟C13;
      C13、判斷可執(zhí)行腳本中是否包含重定向語句,若是,則將重定向的URL 存入第L級DOM樹節(jié)點(diǎn)中的URL隊(duì)列中,然后執(zhí)行步驟D;若否,則執(zhí)行步 驟D;
      或者,所述步驟C具體包括C21、編譯、執(zhí)行可執(zhí)行腳本;
      C22、判斷可執(zhí)行腳本中是否包含重定向語句,若是,則將重定向的URL 存入第L級DOM樹節(jié)點(diǎn)中的URL隊(duì)列中,然后執(zhí)行步驟D;若否,則執(zhí)行步 驟C23;
      C23、判斷可執(zhí)行腳本是否動(dòng)態(tài)生成了網(wǎng)頁內(nèi)容,若是,則解析該網(wǎng)頁內(nèi) 容,將獲得的新的腳本和URL分別存入第L級DOM樹節(jié)點(diǎn)中的腳本隊(duì)列和 URL隊(duì)列中,然后執(zhí)行步驟D;若否,則執(zhí)行步驟D。
      上述技術(shù)方案中,該方法采用js執(zhí)行引擎spidermonkey;所述可執(zhí)行腳本 為js腳本,所述非可執(zhí)行腳本為vbscript腳本和/或JScript.Encode腳本。
      本發(fā)明還提供一種從網(wǎng)頁內(nèi)容中提取URL的系統(tǒng),該系統(tǒng)包括下載網(wǎng)頁 內(nèi)容模塊、解析網(wǎng)頁內(nèi)容模塊、解碼腳本模塊及腳本執(zhí)行模塊;其中,
      下載網(wǎng)頁內(nèi)容模塊,用于根據(jù)URL下載網(wǎng)頁內(nèi)容,并將下載的網(wǎng)頁內(nèi)容發(fā) 送給解析網(wǎng)頁內(nèi)容模塊;
      解析網(wǎng)頁內(nèi)容模塊,用于解析收到的網(wǎng)頁內(nèi)容,生成包含腳本隊(duì)列和URL 隊(duì)列的DOM樹節(jié)點(diǎn);
      解碼腳本模塊,用于遍歷所述DOM樹節(jié)點(diǎn)中腳本,將DOM樹節(jié)點(diǎn)中的
      非可執(zhí)行腳本轉(zhuǎn)換為可執(zhí)行腳本,并發(fā)送給腳本執(zhí)行模塊;
      腳本執(zhí)行模塊,用于編譯、執(zhí)行可執(zhí)行腳本,將執(zhí)行腳本后獲得的新腳本 和/或URL存入當(dāng)前DOM樹節(jié)點(diǎn)中的腳本隊(duì)列和/或URL隊(duì)列中。
      上述技術(shù)方案中,所述腳本執(zhí)行模塊采用js執(zhí)行引擎spidermonkey;所述 可執(zhí)行腳本為js腳本;所述非可執(zhí)行腳本為vbscript腳本和/或JScript.Encode 腳本。
      與現(xiàn)有技術(shù)相比,本發(fā)明從網(wǎng)頁內(nèi)容中提取統(tǒng)一資源定位符的方法及系統(tǒng), 通過增加腳本執(zhí)行引擎來編譯、執(zhí)行腳本語句,在獲取iframe、 frameset、 a等 頁面標(biāo)簽的URL的基礎(chǔ)上,還可獲取腳本語句產(chǎn)生網(wǎng)頁站點(diǎn)重定向的URL, 或進(jìn)一步通過解析腳本動(dòng)態(tài)生成的網(wǎng)頁內(nèi)容獲取新的URL,從而增加了可獲取 的URL的數(shù)量。


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