網(wǎng)頁頁面鏈接地址的獲取方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種網(wǎng)頁頁面鏈接地址的獲取方法和裝置。該方法包括:加載原始網(wǎng)頁頁面,監(jiān)聽原始網(wǎng)頁頁面是否發(fā)生跳轉(zhuǎn)事件,觸發(fā)用于模擬原始網(wǎng)頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件,在監(jiān)聽到原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的情況下,阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn),并截獲原始網(wǎng)頁頁面的頁面跳轉(zhuǎn)請(qǐng)求,從頁面跳轉(zhuǎn)請(qǐng)求中讀取原始網(wǎng)頁頁面所要跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁頁面的鏈接地址。本發(fā)明解決了獲取網(wǎng)頁頁面鏈接地址效率差的問題。
【專利說明】網(wǎng)頁頁面鏈接地址的獲取方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)互聯(lián)網(wǎng)領(lǐng)域,具體而言,涉及一種網(wǎng)頁頁面鏈接地址的獲取方法和裝置。
【背景技術(shù)】
[0002]隨著超文本標(biāo)記語言html5時(shí)代的到來,越來越多的網(wǎng)站會(huì)選擇在網(wǎng)頁中嵌入大量的js代碼來達(dá)到酷炫的網(wǎng)站瀏覽效果,很多網(wǎng)站會(huì)利用js來進(jìn)行跳轉(zhuǎn)的導(dǎo)航而不再直接使用<a>標(biāo)簽;對(duì)于搜索引擎而言,這些通過js來進(jìn)行跳轉(zhuǎn)的頁面是難以獲取到的,而且目前難以存在一種網(wǎng)頁解析方法可以完整地將通過js來進(jìn)行跳轉(zhuǎn)的那些頁面抓取到。對(duì)于一個(gè)希望拿到某個(gè)網(wǎng)站的網(wǎng)站地圖的需求來講,如果這個(gè)網(wǎng)站存在大量的js導(dǎo)航的頁面,那么通過現(xiàn)行的爬蟲方法是難以快速完整地獲取網(wǎng)站地圖的;對(duì)于一個(gè)單頁式網(wǎng)站,在一些前端框架,也是無法獲取其全部頁面的。究其根源,是因?yàn)閷?duì)于單獨(dú)一個(gè)頁面無法完整高效地解析出其到底可以連接到哪些頁面。
[0003]現(xiàn)有的搜索引擎爬蟲技術(shù)的原理是解析提取一個(gè)html頁面的所有<a>標(biāo)簽的href屬性的值。這種做法速度快,不需要額外的http請(qǐng)求,容易實(shí)現(xiàn)。然而隨著html5的發(fā)展,在<a>標(biāo)簽的href屬性內(nèi)部署js代碼來進(jìn)行導(dǎo)航的情況逐漸增多,通過在span、div、button等標(biāo)簽的click事件中部署js跳轉(zhuǎn)語句window, locat1n = ‘targetUrl’的情況亦逐漸增多。傳統(tǒng)的搜索引擎爬蟲技術(shù)并不能抓取到通過這些方法鏈接到的頁面。
[0004]另一種顯而易見的針對(duì)這個(gè)問題的做法就是模擬瀏覽器的點(diǎn)擊操作,將每種dom元素都觸發(fā)一次點(diǎn)擊事件,等待運(yùn)行結(jié)果并監(jiān)測(cè)在等待時(shí)間內(nèi)是否發(fā)生頁面跳轉(zhuǎn)。這種做法可以完整地獲取到一個(gè)頁面都鏈接到哪些其他頁面,但是效率極差。該做法需要針對(duì)每一個(gè)dom元素進(jìn)行點(diǎn)擊操作,并且需要等待5至10秒的時(shí)間來判斷是否會(huì)發(fā)生頁面跳轉(zhuǎn)。針對(duì)一個(gè)頁面,則會(huì)隨著這個(gè)頁面dom元素的數(shù)量增多而效率變差。對(duì)于爬蟲技術(shù)來說,需要在短時(shí)間內(nèi)解析多個(gè)html頁面,該做法顯然是不現(xiàn)實(shí)的。
[0005]針對(duì)現(xiàn)有技術(shù)中獲取網(wǎng)頁頁面鏈接地址效率差的問題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的主要目的在于提供一種網(wǎng)頁頁面鏈接地址的獲取方法和裝置,以解決現(xiàn)有技術(shù)中獲取網(wǎng)頁頁面鏈接地址效率差的問題。
[0007]為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種網(wǎng)頁頁面鏈接地址的獲取方法,該方法包括:加載原始網(wǎng)頁頁面,觸發(fā)用于模擬原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件,監(jiān)聽原始網(wǎng)頁頁面是否發(fā)生跳轉(zhuǎn)事件,在監(jiān)聽到原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的情況下,阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn),并截獲原始網(wǎng)頁頁面的頁面跳轉(zhuǎn)請(qǐng)求,從頁面跳轉(zhuǎn)請(qǐng)求中讀取原始網(wǎng)頁頁面所要跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁頁面的鏈接地址。
[0008]為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明實(shí)施例的另一方面,提供了一種網(wǎng)頁頁面鏈接地址的獲取裝置,該裝置包括:第一加載模塊,用于加載原始網(wǎng)頁頁面,點(diǎn)擊模塊,用于觸發(fā)用于模擬原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件,截獲模塊,用于監(jiān)聽原始網(wǎng)頁頁面是否發(fā)生跳轉(zhuǎn)事件,在監(jiān)聽到原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的情況下,阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn),并截獲原始網(wǎng)頁頁面的頁面跳轉(zhuǎn)請(qǐng)求,讀取模塊,用于從頁面跳轉(zhuǎn)請(qǐng)求中讀取原始網(wǎng)頁頁面所要跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁頁面的鏈接地址。
[0009]根據(jù)本發(fā)明實(shí)施例,通過網(wǎng)頁頁面鏈接地址的獲取方法,解決了相關(guān)技術(shù)中獲取網(wǎng)頁頁面鏈接地址效率差的問題,達(dá)到了高效的獲取網(wǎng)頁頁面鏈接地址的效果。
【專利附圖】
【附圖說明】
[0010]構(gòu)成本申請(qǐng)的一部分的附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
[0011]圖1是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁頁面鏈接地址的獲取方法的流程示意圖;
[0012]圖2是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁頁面鏈接地址的獲取裝置的結(jié)構(gòu)示意圖;
[0013]圖3是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁頁面鏈接地址的獲取裝置的一種優(yōu)選結(jié)構(gòu)示意圖;
[0014]圖4是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁頁面鏈接地址的獲取裝置的另一種優(yōu)選結(jié)構(gòu)示意圖;
[0015]圖5是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁頁面鏈接地址的獲取裝置的另一種優(yōu)選結(jié)構(gòu)示意圖;
[0016]圖6是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁頁面鏈接地址的獲取裝置的另一種優(yōu)選結(jié)構(gòu)示意圖;
[0017]圖7是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁頁面鏈接地址的獲取裝置的另一種優(yōu)選結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0018]需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。下面將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本發(fā)明。
[0019]為了使本【技術(shù)領(lǐng)域】的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
[0020]需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
[0021 ] 下面就對(duì)本申請(qǐng)涉及到的名詞概念進(jìn)行說明:
[0022]js: Javascript,—種由Netscape的LiveScript發(fā)展而來的腳本語言,主要目的是為了解決服務(wù)器終端語言。
[0023]dom:Document Object Model,文檔對(duì)象模型,一種用于html和xml文檔的編輯接口,它給文檔提供了一種結(jié)構(gòu)化的表示方法,可以改變文檔的內(nèi)容和呈現(xiàn)方式,把網(wǎng)頁和腳本以及其他的編輯語言聯(lián)系了起來。
[0024]phantomjs:是一個(gè)基于js的webkit內(nèi)核無頭瀏覽器,也就是沒有顯示界面的瀏覽器,這樣訪問網(wǎng)頁就省去了瀏覽器的界面繪制所消耗的系統(tǒng)資源,比較合適用于網(wǎng)絡(luò)測(cè)試。
[0025]實(shí)施例1
[0026]根據(jù)本發(fā)明實(shí)施例,提供了一種網(wǎng)頁頁面鏈接地址的獲取方法的方法實(shí)施例。需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
[0027]本申請(qǐng)實(shí)施例一所提供的方法實(shí)施例可以在移動(dòng)終端、計(jì)算機(jī)終端或者類似的運(yùn)算裝置中執(zhí)行。
[0028]圖1是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁頁面鏈接地址的獲取方法流程示意圖。出于描述的目的,所繪的體系結(jié)構(gòu)僅為合適環(huán)境的一個(gè)示例,并非對(duì)本申請(qǐng)的使用范圍或功能提出任何局限。也不應(yīng)該將該網(wǎng)頁頁面鏈接地址的獲取方法為對(duì)圖1所示的任一組件或組合具有任何依賴或需求。
[0029]如圖1所示,該網(wǎng)頁頁面鏈接地址的獲取方法可以包括:
[0030]S12,加載原始網(wǎng)頁頁面,監(jiān)聽原始網(wǎng)頁頁面是否發(fā)生跳轉(zhuǎn)事件;
[0031]其中,在步驟S12中,加載原始網(wǎng)頁頁面是利用phantomjs構(gòu)建一個(gè)瀏覽器平臺(tái),以此來對(duì)要分析的頁面中的js來進(jìn)行解析,phantomjs為開發(fā)人員提供了一組API,通過phantomjs構(gòu)建一個(gè)瀏覽器平臺(tái),將原始網(wǎng)頁頁面加載進(jìn)來,這樣訪問網(wǎng)頁就省去了瀏覽器界面繪制所消耗的系統(tǒng)資源,所以不再請(qǐng)求多余的圖片、多媒體等資源,加快了原始網(wǎng)頁頁面的加載速度;上述原始網(wǎng)頁頁面為超文本標(biāo)記語言html頁面,在利用phantomjs構(gòu)建的瀏覽器中加載html頁面,并監(jiān)聽html頁面是否發(fā)生跳轉(zhuǎn)請(qǐng)求。
[0032]S14,觸發(fā)用于模擬原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件;
[0033]其中,在步驟S14中,通過在phantomjs中觸發(fā)用于模擬原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)的點(diǎn)擊事件,使得在phantomjs中模擬點(diǎn)擊行為,進(jìn)一步使得新的網(wǎng)頁頁面易于被捕捉到,最終獲取目標(biāo)網(wǎng)頁頁面的鏈接地址。
[0034]S16,在監(jiān)聽到原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的情況下,阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn),并截獲原始網(wǎng)頁頁面的頁面跳轉(zhuǎn)請(qǐng)求;
[0035]其中,在步驟S16中,原始網(wǎng)頁頁面為html頁面,當(dāng)html頁面執(zhí)行跳轉(zhuǎn)指令時(shí),監(jiān)聽到html頁面發(fā)生跳轉(zhuǎn)事件,阻塞html頁面跳轉(zhuǎn)至目標(biāo)網(wǎng)頁頁面,終止目標(biāo)網(wǎng)頁頁面的加載,并截獲html頁面的頁面跳轉(zhuǎn)請(qǐng)求;阻塞html頁面跳轉(zhuǎn)至目標(biāo)網(wǎng)頁頁面可以阻止多余內(nèi)容的加載,如此,不需要消耗過多的資源在多余的頁面加載請(qǐng)求上。
[0036]S18,從頁面跳轉(zhuǎn)請(qǐng)求中讀取原始網(wǎng)頁頁面所要跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁頁面的鏈接地址。
[0037]其中,在步驟S18中,原始網(wǎng)頁頁面為html頁面,在html頁面跳轉(zhuǎn)請(qǐng)求中包含有原始網(wǎng)頁頁面所要跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁頁面的鏈接地址,該鏈接地址為統(tǒng)一資源定位器URL;所以,在截獲html頁面的頁面跳轉(zhuǎn)請(qǐng)求后,讀取目標(biāo)網(wǎng)頁頁面的鏈接地址URL,由于本方法是基于phantomjs的點(diǎn)擊行為進(jìn)行分析的,固可以非常完整地解析出網(wǎng)頁中所包含的所有鏈接,不會(huì)受到j(luò)s動(dòng)態(tài)句法的干擾。
[0038]本申請(qǐng)上述實(shí)施例1的方法,提供了一種網(wǎng)頁頁面鏈接地址的獲取方法,該方法通過瀏覽器加載原始網(wǎng)頁頁面,觸發(fā)用于模擬原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件,阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn),并從頁面跳轉(zhuǎn)請(qǐng)求中讀取目標(biāo)網(wǎng)頁頁面的鏈接地址;與現(xiàn)有技術(shù)相比,克服了一些js生成的鏈接難以被爬蟲獲取到的問題,進(jìn)一步達(dá)到了高效獲取網(wǎng)頁頁面鏈接地址的目的。
[0039]具體地,在步驟S12之前,該方法還包括:
[0040]S11,加載用于阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)的阻塞功能函數(shù),并加載用于監(jiān)聽跳轉(zhuǎn)事件以及捕獲目標(biāo)網(wǎng)頁頁面的鏈接地址的監(jiān)控功能函數(shù);其中,加載原始網(wǎng)頁頁面成功之后,啟動(dòng)阻塞功能函數(shù)。
[0041]在步驟Sll中,是利用phantomjs構(gòu)建一個(gè)瀏覽平臺(tái)來加載用于阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)的阻塞功能函數(shù),phantomjs為開發(fā)人員提供了一組API,通過phantomjs構(gòu)建一個(gè)瀏覽器平臺(tái),將原始網(wǎng)頁頁面加載進(jìn)來,這樣訪問網(wǎng)頁就省去了瀏覽器界面繪制所消耗的系統(tǒng)資源,不再請(qǐng)求多余的圖片、多媒體等資源,加快了加載阻塞功能函數(shù)和監(jiān)聽功能函數(shù)的速度;其中,利用phantomjs加載html頁面,以此來對(duì)要分析的html頁面中的js來進(jìn)行解析,調(diào)用phantomjs中所提供的一組API,其中,包括:阻塞功能函數(shù)navigat1nLocked,用于阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn),在點(diǎn)擊的鏈接發(fā)生跳轉(zhuǎn)之前及時(shí)終止新網(wǎng)頁的加載;還有包括監(jiān)控功能函數(shù)onNavigat1nRequested,用于監(jiān)聽跳轉(zhuǎn)事件以及捕獲目標(biāo)網(wǎng)頁頁面的鏈接地址,本方法利用phantomjs構(gòu)建一個(gè)瀏覽平臺(tái)、并調(diào)用phantomjs中阻塞功能函數(shù)和監(jiān)聽功能函數(shù),比樸素的模擬點(diǎn)擊更快更高效。并且消耗的網(wǎng)絡(luò)資源更小。
[0042]具體地,在步驟S14中,該方法還包括:
[0043]S142,通過調(diào)用創(chuàng)建事件函數(shù)創(chuàng)建原始網(wǎng)頁頁面的文檔對(duì)象模型dom元素的點(diǎn)擊事件;
[0044]在步驟S142中,由于phantomjs并不內(nèi)置點(diǎn)擊事件,所以本步驟是通過創(chuàng)建事件函數(shù)createEvent來創(chuàng)建原始網(wǎng)頁頁面的dom元素的點(diǎn)擊事件的,其中,倉Il建每個(gè)dom元素的點(diǎn)擊事件中,dom元素是本方法中必不可少的信息,因?yàn)樵谟|發(fā)每個(gè)dom元素的點(diǎn)擊事件后可以完整地獲取到一個(gè)頁面都鏈接到哪些其他網(wǎng)頁。
[0045]S144,在監(jiān)聽原始網(wǎng)頁頁面是否發(fā)生跳轉(zhuǎn)事件之前,通過調(diào)用調(diào)度事件函數(shù)觸發(fā)原始網(wǎng)頁頁面的dom元素的點(diǎn)擊事件。
[0046]在步驟S144中,通過調(diào)度事件函數(shù)dispatchEvent來對(duì)每個(gè)dom元素進(jìn)行點(diǎn)擊事件的觸發(fā),當(dāng)一個(gè)dom元素被點(diǎn)擊時(shí),絕大多數(shù)情況下,都會(huì)在很短的時(shí)間內(nèi)觸發(fā)完畢所有的事件,這樣,短時(shí)間內(nèi)完成觸發(fā)比樸素的模擬點(diǎn)擊更快更高效。
[0047]具體地,步驟S16具體包括:
[0048]S162,在監(jiān)聽到原始網(wǎng)頁頁面的dom元素的點(diǎn)擊事件被觸發(fā)之后,通過調(diào)用判斷函數(shù)判斷是否觸發(fā)所述頁面跳轉(zhuǎn)請(qǐng)求;
[0049]在這步驟S162中,在監(jiān)聽到原始網(wǎng)頁頁面中的dom元素的點(diǎn)擊事件被觸發(fā)之后,通過調(diào)用判斷函數(shù),判斷是否也觸發(fā)了頁面跳轉(zhuǎn)請(qǐng)求,例如,即如果一個(gè)dom元素被綁定的點(diǎn)擊事件列表存在頁面跳轉(zhuǎn)事件,其將被迅速觸發(fā)(約200毫秒以內(nèi)),反之如果在這個(gè)時(shí)間內(nèi)沒有檢測(cè)到有跳轉(zhuǎn)事件被觸發(fā),則可以說該dom元素沒有被綁定頁面跳轉(zhuǎn)事件。跳轉(zhuǎn)事件被觸發(fā)之后,則可以獲取到跳轉(zhuǎn)到的目標(biāo)鏈接,即該頁面所鏈接到的其他頁面的信息。
[0050]S164,在判斷結(jié)果為觸發(fā)所述頁面跳轉(zhuǎn)請(qǐng)求的情況下,通過調(diào)用阻塞功能函數(shù)阻止加載頁面跳轉(zhuǎn)請(qǐng)求,使得阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)。
[0051]在步驟S164中,在判斷結(jié)果為在短時(shí)間內(nèi)已經(jīng)觸發(fā)了頁面跳轉(zhuǎn)請(qǐng)求的情況下,調(diào)用阻塞功能函數(shù)navigat1nLocked,將navigat1nLocked置為true以阻止加載頁面跳轉(zhuǎn)請(qǐng)求,使得點(diǎn)擊的鏈接發(fā)生跳轉(zhuǎn)之前及時(shí)終止新網(wǎng)頁的加載,阻塞原始網(wǎng)頁頁面跳轉(zhuǎn)至目標(biāo)網(wǎng)頁頁面可以阻止多余內(nèi)容的加載,如此,不需要消耗過多的資源在多余的頁面加載請(qǐng)求上。
[0052]具體地,步驟S142之前,該方法還包括:
[0053]S13,通過調(diào)用獲取函數(shù)獲取所述原始網(wǎng)頁頁面的dom元素。
[0054]在步驟S13中,當(dāng)執(zhí)行當(dāng)前任務(wù)隊(duì)列時(shí),首先,調(diào)用獲取函數(shù)獲取原始網(wǎng)頁頁面的dom元素,然后觸發(fā)原始網(wǎng)頁頁面的dom元素的點(diǎn)擊事件,進(jìn)而判斷是否也觸發(fā)了頁面跳轉(zhuǎn)請(qǐng)求,跳轉(zhuǎn)事件被觸發(fā)之后,則可以獲取到跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁頁面的鏈接地址,即該原始網(wǎng)頁頁面所鏈接到的其他頁面的信息。在沒有觸發(fā)頁面跳轉(zhuǎn)請(qǐng)求的情況下,執(zhí)行下一個(gè)任務(wù)隊(duì)列;然而dom元素屬于解決該問題的必要信息,是難以回避的,可以通過配置只選取點(diǎn)擊某些固定的標(biāo)簽類型來去掉多余的標(biāo)簽分析,縮減總體消耗的時(shí)間;根據(jù)這一原理,可以在200毫秒左右的時(shí)間以內(nèi)獲取到一個(gè)dom元素跳轉(zhuǎn)到目標(biāo)網(wǎng)頁頁面的鏈接地址,通過在200毫秒以內(nèi)的時(shí)間之內(nèi)將一個(gè)dom元素所包含的鏈接信息解析出來,比現(xiàn)有技術(shù)快了 25?50倍。
[0055]對(duì)整個(gè)原始網(wǎng)頁頁面的每個(gè)dom元素都觸發(fā)點(diǎn)擊事件,并把這一行為利用多條任務(wù)隊(duì)列中執(zhí)行,并在onNavigat1nRequested函數(shù)中監(jiān)聽跳轉(zhuǎn)請(qǐng)求中所包含的統(tǒng)一資源定位器URL。以此來達(dá)到解析整個(gè)原始網(wǎng)頁頁面的捕獲頁面跳轉(zhuǎn)請(qǐng)求的目標(biāo)URL的目的。
[0056]例如,一個(gè)擁有一千個(gè)dom元素左右的原始網(wǎng)頁頁面,在本步驟中用10條任務(wù)隊(duì)列的情況下,只需要20?40秒左右的時(shí)間即可解析完所有的dom元素,同樣的情況傳統(tǒng)方法在20?40秒只能解析2?8個(gè)dom元素。效率可謂大大提高。
[0057]具體地,步驟S142之后,該方法還包括:
[0058]S143,通過調(diào)用非新建窗口函數(shù)將原始網(wǎng)頁頁面重寫為非新建窗口的形式,并改寫原始網(wǎng)頁頁面的預(yù)設(shè)標(biāo)簽的目標(biāo)屬性為自適應(yīng)形式,其中,非新建窗口函數(shù)和預(yù)設(shè)標(biāo)簽的目標(biāo)屬性用于將獲取到的目標(biāo)網(wǎng)頁頁面的鏈接地址顯示在原始網(wǎng)頁頁面上。
[0059]在步驟S143中,將非新建窗口函數(shù)window, open重寫為非新建窗口的形式,并且將所有的〈a>標(biāo)簽的target屬性改為_self,以此保證onNavigat1nRequested可以完全捕獲到跳轉(zhuǎn)請(qǐng)求,還可以通過配置只選取點(diǎn)擊某些固定的標(biāo)簽類型來去掉多余的標(biāo)簽分析,縮減總體消耗的時(shí)間。
[0060]本發(fā)明提出的一種網(wǎng)頁頁面鏈接地址的獲取方法,通過加載原始網(wǎng)頁頁面,觸發(fā)用于模擬原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件,監(jiān)聽原始網(wǎng)頁頁面是否發(fā)生跳轉(zhuǎn)事件,在監(jiān)聽到原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的情況下,阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn),并截獲原始網(wǎng)頁頁面的頁面跳轉(zhuǎn)請(qǐng)求,從頁面跳轉(zhuǎn)請(qǐng)求中讀取原始網(wǎng)頁頁面所要跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁頁面的鏈接地址,因此,本申請(qǐng)?zhí)峁┝艘环N高效地獲取目標(biāo)網(wǎng)頁頁面鏈接地址的方法,即在phantomjs中加載原始網(wǎng)頁頁面之后,通過觸發(fā)用于模擬原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件,對(duì)原始網(wǎng)頁頁面進(jìn)行監(jiān)聽,當(dāng)監(jiān)聽到原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)請(qǐng)求的情況下,阻止原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)以終止目標(biāo)網(wǎng)頁頁面的加載,從而阻止加載多余的內(nèi)容,不需要消耗過多的資源在多余的頁面加載請(qǐng)求上,同時(shí)截獲原始網(wǎng)頁頁面的跳轉(zhuǎn)請(qǐng)求以讀取目標(biāo)網(wǎng)頁頁面的鏈接地址。由于上述方法中的在phantomjs中加載原始網(wǎng)頁頁面,不再請(qǐng)求多余的圖片、多媒體等資源,加快了原始網(wǎng)頁頁面的加載速度,上述阻止原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)以終止目標(biāo)網(wǎng)頁頁面的加載,并不需要消耗過的資源在多余的頁面加載請(qǐng)求上,因此加快了最終獲取目標(biāo)網(wǎng)頁頁面鏈接地址的速度,進(jìn)而解決了現(xiàn)有技術(shù)中獲取網(wǎng)頁頁面鏈接地址效率差的問題,克服了一些js生成的鏈接難以被爬蟲獲取到的問題,達(dá)到了高效的獲取網(wǎng)頁頁面鏈接地址的效果。本發(fā)明在多數(shù)情況下足以滿足爬蟲的需求,并節(jié)省了網(wǎng)絡(luò)請(qǐng)求資源,能使獲取目標(biāo)網(wǎng)頁頁面的鏈接地址的效率提高一個(gè)檔次,能夠?qū)崿F(xiàn)高效的獲取網(wǎng)頁頁面鏈接地址。
[0061]實(shí)施例2
[0062]本發(fā)明實(shí)施例還提供了一種網(wǎng)頁頁面鏈接地址的獲取裝置,本申請(qǐng)上述實(shí)施例所提供的裝置可以在計(jì)算機(jī)終端或移動(dòng)終端上運(yùn)行,但不限于此。
[0063]圖2是根據(jù)本發(fā)明是實(shí)施例的網(wǎng)頁頁面鏈接地址的獲取裝置的結(jié)構(gòu)示意圖。如圖2所示,該裝置包括:第一加載模塊21、點(diǎn)擊模塊22、截獲模塊23和讀取模塊24 ;
[0064]其中,第一加載模塊21,用于加載原始網(wǎng)頁頁面;
[0065]具體地,在第一加載模塊21中,加載原始網(wǎng)頁頁面是利用phantomjs構(gòu)建一個(gè)瀏覽器平臺(tái),以此來對(duì)要分析的頁面中的js來進(jìn)行解析,phantomjs為開發(fā)人員提供了一組API,通過phantomjs構(gòu)建一個(gè)瀏覽器平臺(tái),將原始網(wǎng)頁頁面加載進(jìn)來,這樣訪問網(wǎng)頁就省去了瀏覽器界面繪制所消耗的系統(tǒng)資源,所以不再請(qǐng)求多余的圖片、多媒體等資源,力口快了原始網(wǎng)頁頁面的加載速度;上述原始網(wǎng)頁頁面為超文本標(biāo)記語言html頁面,在利用phantomjs構(gòu)建的瀏覽器中加載html頁面,并監(jiān)聽html頁面是否發(fā)生跳轉(zhuǎn)請(qǐng)求。
[0066]其中,點(diǎn)擊模塊22,用于觸發(fā)用于模擬原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件;
[0067]在上述點(diǎn)擊模塊22中,通過在phantomjs中觸發(fā)用于模擬原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件,使得在phantomjs中模擬點(diǎn)擊行為,進(jìn)一步使得新的網(wǎng)頁頁面易于被捕捉到,最終獲取目標(biāo)網(wǎng)頁頁面的鏈接地址。
[0068]截獲模塊23,連接至第一點(diǎn)擊模塊22,用于監(jiān)聽原始網(wǎng)頁頁面是否發(fā)生跳轉(zhuǎn)事件,在監(jiān)聽到原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的情況下,阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn),并截獲原始網(wǎng)頁頁面的頁面跳轉(zhuǎn)請(qǐng)求;
[0069]具體地,在截獲模塊23中,原始網(wǎng)頁頁面為html頁面,當(dāng)html頁面執(zhí)行跳轉(zhuǎn)指令時(shí),監(jiān)聽到html頁面發(fā)生跳轉(zhuǎn)事件,阻塞html頁面跳轉(zhuǎn)至目標(biāo)網(wǎng)頁頁面,終止目標(biāo)網(wǎng)頁頁面的加載,并截獲html頁面的頁面跳轉(zhuǎn)請(qǐng)求;阻塞html頁面跳轉(zhuǎn)至目標(biāo)網(wǎng)頁頁面可以阻止多余內(nèi)容的加載,如此,不需要消耗過多的資源在多余的頁面加載請(qǐng)求上。
[0070]讀取模塊24,連接至截獲模塊23,用于從頁面跳轉(zhuǎn)請(qǐng)求中讀取原始網(wǎng)頁頁面所要跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁頁面的鏈接地址。
[0071]具體地,在讀取模塊24中,原始網(wǎng)頁頁面為html頁面,在html頁面跳轉(zhuǎn)請(qǐng)求中包含有原始網(wǎng)頁頁面所要跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁頁面的鏈接地址,該鏈接地址為統(tǒng)一資源定位器URL ;所以,在截獲html頁面的頁面跳轉(zhuǎn)請(qǐng)求后,讀取目標(biāo)網(wǎng)頁頁面的鏈接地址URL,由于本裝置是基于phantomjs的點(diǎn)擊行為進(jìn)行分析的,固可以非常完整地解析出網(wǎng)頁中所包含的所有鏈接,不會(huì)受到j(luò)s動(dòng)態(tài)句法的干擾。
[0072]本申請(qǐng)上述實(shí)施例2的裝置,提供了一種網(wǎng)頁頁面鏈接地址的獲取裝置,該裝置通過第一加載模塊21加載原始網(wǎng)頁頁面,通過點(diǎn)擊模塊22觸發(fā)用于模擬原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件,通過截獲模塊23截獲原始網(wǎng)頁頁面的頁面跳轉(zhuǎn)請(qǐng)求,通過讀取模塊24讀取原始網(wǎng)頁頁面所要跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁頁面的鏈接地址,與現(xiàn)有技術(shù)相比,克服了一些js生成的鏈接難以被爬蟲獲取到的問題,達(dá)到了高效的獲取網(wǎng)頁頁面鏈接地址的目的。
[0073]圖3是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁頁面鏈接地址的獲取裝置的一種優(yōu)選結(jié)構(gòu)示意圖,如圖3所示,該裝置包括圖2所示的所有結(jié)構(gòu)外,還包括:第二加載模塊31,下面對(duì)該裝置進(jìn)行說明。
[0074]第二加載模塊31,連接至第一加載模塊21,用于加載原始網(wǎng)頁頁面之前,加載用于阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)的阻塞功能函數(shù),并加載用于監(jiān)聽跳轉(zhuǎn)事件以及捕獲目標(biāo)網(wǎng)頁頁面的鏈接地址的監(jiān)控功能函數(shù);其中,加載原始網(wǎng)頁頁面成功之后,啟動(dòng)阻塞功能函數(shù)。
[0075]在第二加載模塊31中,是利用phantomjs構(gòu)建一個(gè)瀏覽平臺(tái)來加載用于阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)的阻塞功能函數(shù),phantomjs為開發(fā)人員提供了一組API,通過phantomjs構(gòu)建一個(gè)瀏覽器平臺(tái),將原始網(wǎng)頁頁面加載進(jìn)來,這樣訪問網(wǎng)頁就省去了瀏覽器界面繪制所消耗的系統(tǒng)資源,不再請(qǐng)求多余的圖片、多媒體等資源,加快了加載阻塞功能函數(shù)和監(jiān)聽功能函數(shù)的速度;其中,利用phantomjs加載html頁面,以此來對(duì)要分析的html頁面中的js來進(jìn)行解析,調(diào)用phantomjs中所提供的一組API,其中,包括:阻塞功能函數(shù)navigat1nLocked,用于阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn),在點(diǎn)擊的鏈接發(fā)生跳轉(zhuǎn)之前及時(shí)終止新網(wǎng)頁的加載;還有包括監(jiān)控功能函數(shù)onNavigat1nRequested,用于監(jiān)聽跳轉(zhuǎn)事件以及捕獲目標(biāo)網(wǎng)頁頁面的鏈接地址,本方法利用phantomjs構(gòu)建一個(gè)瀏覽平臺(tái)、并調(diào)用phantomjs中阻塞功能函數(shù)和監(jiān)聽功能函數(shù),比樸素的模擬點(diǎn)擊更快更高效。并且消耗的網(wǎng)絡(luò)資源更小。
[0076]圖4是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁頁面鏈接地址的獲取裝置的另一種優(yōu)選結(jié)構(gòu)示意圖;如圖4所示,該裝置包括圖2所示的所有結(jié)構(gòu),其中,該點(diǎn)擊模塊22包括:創(chuàng)建單元41和觸發(fā)單元42,下面對(duì)該裝置進(jìn)行說明。
[0077]創(chuàng)建模塊41,用于通過調(diào)用創(chuàng)建事件函數(shù)創(chuàng)建原始網(wǎng)頁頁面中的文檔對(duì)象模型dom元素的點(diǎn)擊事件;
[0078]具體地,在創(chuàng)建單元41中,由于phantomjs并不內(nèi)置點(diǎn)擊事件,所以本步驟是通過創(chuàng)建事件函數(shù)createEvent來創(chuàng)建原始網(wǎng)頁頁面的dom元素的點(diǎn)擊事件的,其中,創(chuàng)建每個(gè)dom元素的點(diǎn)擊事件中,dom元素是本方法中必不可少的信息,因?yàn)樵谟|發(fā)每個(gè)dom元素的點(diǎn)擊事件后可以完整地獲取到一個(gè)頁面都鏈接到哪些其他網(wǎng)頁。
[0079]觸發(fā)單元42,連接至創(chuàng)建單元41,用于在監(jiān)聽原始網(wǎng)頁頁面是否發(fā)生跳轉(zhuǎn)事件之前,通過調(diào)用調(diào)度事件函數(shù)觸發(fā)原始網(wǎng)頁頁面的dom元素的點(diǎn)擊事件。
[0080]具體地,在觸發(fā)單元42中,通過調(diào)度事件函數(shù)dispatchEvent來對(duì)每個(gè)dom元素進(jìn)行點(diǎn)擊事件的觸發(fā),當(dāng)一個(gè)dom元素被點(diǎn)擊時(shí),絕大多數(shù)情況下,都會(huì)在很短的時(shí)間內(nèi)觸發(fā)完畢所有的時(shí)間,這樣,短時(shí)間內(nèi)完成觸發(fā)閉樸素的模擬點(diǎn)擊更快更高效。
[0081]圖5是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁頁面鏈接地址的獲取裝置的另一種優(yōu)選結(jié)構(gòu)示意圖;如圖5所示,該裝置包括圖2所示的所有結(jié)構(gòu),其中該截獲模塊23還包括:判斷單元51和阻塞單元52,下面對(duì)該裝置進(jìn)行說明。
[0082]判斷單元51,用于通過調(diào)用判斷函數(shù)判斷是否觸發(fā)頁面跳轉(zhuǎn)請(qǐng)求;
[0083]在上述判斷單元51中,在監(jiān)聽到原始網(wǎng)頁頁面中的dom元素的點(diǎn)擊事件被觸發(fā)之后,通過調(diào)用判斷函數(shù),判斷是否也觸發(fā)了頁面跳轉(zhuǎn)請(qǐng)求,例如,即如果一個(gè)dom元素被綁定的點(diǎn)擊事件列表存在頁面跳轉(zhuǎn)事件,其將被迅速觸發(fā)(約200毫秒以內(nèi)),反之如果在這個(gè)時(shí)間內(nèi)沒有檢測(cè)到有跳轉(zhuǎn)事件被觸發(fā),則可以說該dom元素沒有被綁定頁面跳轉(zhuǎn)事件。跳轉(zhuǎn)事件被觸發(fā)之后,則可以獲取到跳轉(zhuǎn)到的目標(biāo)鏈接,即該頁面所鏈接到的其他頁面的信息。
[0084]阻塞單元52,連接至判斷單元51,用于在判斷結(jié)果為觸發(fā)頁面跳轉(zhuǎn)請(qǐng)求的情況下,通過調(diào)用阻塞功能函數(shù)阻止加載頁面跳轉(zhuǎn)請(qǐng)求,使得阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)。
[0085]在上述阻塞單元52中,在判斷結(jié)果為在短時(shí)間內(nèi)已經(jīng)觸發(fā)了頁面跳轉(zhuǎn)請(qǐng)求的情況下,調(diào)用將阻塞功能函數(shù)navigat1nLocked,將navigat1nLocked置為true以阻止加載頁面跳轉(zhuǎn)請(qǐng)求,使得點(diǎn)擊的鏈接發(fā)生跳轉(zhuǎn)之前及時(shí)終止新網(wǎng)頁的加載,阻塞原始網(wǎng)頁頁面跳轉(zhuǎn)至目標(biāo)網(wǎng)頁頁面可以阻止多余內(nèi)容的加載,如此,不需要消耗過多的資源在多余的頁面加載請(qǐng)求上。
[0086]圖6是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁頁面鏈接地址的獲取裝置的另一種優(yōu)選結(jié)構(gòu)示意圖;如圖6所示,該裝置包括圖4所示的所有結(jié)構(gòu)外,還包括:獲取模塊61,下面對(duì)該裝置進(jìn)行說明。
[0087]獲取模塊61,連接至點(diǎn)擊模塊22,用于在通過調(diào)用創(chuàng)建事件函數(shù)創(chuàng)建原始網(wǎng)頁頁面的dom元素的點(diǎn)擊事件之前,通過調(diào)用獲取函數(shù)獲取原始網(wǎng)頁頁面的dom元素。
[0088]在上述獲取模塊61中,當(dāng)執(zhí)行當(dāng)前任務(wù)隊(duì)列時(shí),首先,調(diào)用獲取函數(shù)獲取原始網(wǎng)頁頁面的dom元素,然后觸發(fā)原始網(wǎng)頁頁面的dom元素的點(diǎn)擊事件,進(jìn)而判斷是否也觸發(fā)了頁面跳轉(zhuǎn)請(qǐng)求,跳轉(zhuǎn)事件被觸發(fā)之后,則可以獲取到跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁頁面的鏈接地址,即該原始網(wǎng)頁頁面所鏈接到的其他頁面的信息。在沒有觸發(fā)頁面跳轉(zhuǎn)請(qǐng)求的情況下,執(zhí)行下一個(gè)任務(wù)隊(duì)列;然而dom元素屬于解決該問題的必要信息,是難以回避的,可以通過配置只選取點(diǎn)擊某些固定的標(biāo)簽類型來去掉多余的標(biāo)簽分析,縮減總體消耗的時(shí)間;根據(jù)這一原理,可以在200毫秒左右的時(shí)間以內(nèi)獲取到一個(gè)dom元素跳轉(zhuǎn)到目標(biāo)網(wǎng)頁頁面的鏈接地址,通過在200毫秒以內(nèi)的時(shí)間之內(nèi)將一個(gè)dom元素所包含的鏈接信息解析出來,比現(xiàn)有技術(shù)快了 25?50倍。
[0089]對(duì)整個(gè)網(wǎng)頁的每個(gè)dom元素都觸發(fā)點(diǎn)擊事件,并把這一行為利用多條任務(wù)隊(duì)列中執(zhí)行,并在onNavigat1nRequested函數(shù)中監(jiān)聽跳轉(zhuǎn)請(qǐng)求中所包含的統(tǒng)一資源定位器URL。以此來達(dá)到解析整個(gè)網(wǎng)頁的捕獲頁面跳轉(zhuǎn)請(qǐng)求的目標(biāo)URL的目的。
[0090]例如,一個(gè)擁有一千個(gè)dom元素左右的原始網(wǎng)頁頁面,在本步驟中創(chuàng)建10條任務(wù)隊(duì)列的情況下,只需要20?40秒左右的時(shí)間即可解析完所有的dom元素,同樣的情況傳統(tǒng)裝置中在20?40秒只能解析2?8個(gè)dom元素。效率可謂大大提高。
[0091]圖7是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁頁面鏈接地址的獲取裝置的另一種優(yōu)選結(jié)構(gòu)示意圖,如圖7所示,該裝置包括圖4所示的所有結(jié)構(gòu)外,該截獲模塊23還包括:調(diào)用單元71,下面對(duì)該裝置進(jìn)行說明。
[0092]調(diào)用單元71,連接至創(chuàng)建單元41,用于在通過調(diào)用創(chuàng)建事件函數(shù)創(chuàng)建原始網(wǎng)頁頁面的dom元素的點(diǎn)擊事件之后,通過調(diào)用非新建窗口函數(shù)將原始網(wǎng)頁頁面重寫為非新建窗口的形式,并改寫原始網(wǎng)頁頁面的預(yù)設(shè)標(biāo)簽的目標(biāo)屬性為自適應(yīng)形式,其中,非新建窗口函數(shù)和預(yù)設(shè)標(biāo)簽的目標(biāo)屬性用于將獲取到的目標(biāo)網(wǎng)頁頁面的鏈接地址顯示在原始網(wǎng)頁頁面上。
[0093]在上述調(diào)用模塊71中,將非新建窗口函數(shù)window, open重寫為非新建窗口的形式,并且將所有的〈a>標(biāo)簽的target屬性改為_self,以此保證onNavigat1nRequested可以完全捕獲到跳轉(zhuǎn)請(qǐng)求,還可以通過配置只選取點(diǎn)擊某些固定的標(biāo)簽類型來去掉多余的標(biāo)簽分析,縮減總體消耗的時(shí)間。
[0094]本發(fā)明提出的一種網(wǎng)頁頁面鏈接地址的獲取裝置,通過第一加載模塊21加載原始網(wǎng)頁頁面,通過點(diǎn)擊模塊22觸發(fā)用于模擬原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件,通過截獲模塊23監(jiān)聽原始網(wǎng)頁頁面是否發(fā)生跳轉(zhuǎn)事件,在監(jiān)聽到原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的情況下,阻塞原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn),并截獲原始網(wǎng)頁頁面的頁面跳轉(zhuǎn)請(qǐng)求,通過讀取模塊24從頁面跳轉(zhuǎn)請(qǐng)求中讀取原始網(wǎng)頁頁面所要跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁頁面的鏈接地址,因此,本申請(qǐng)?zhí)峁┝艘环N高效地獲取目標(biāo)網(wǎng)頁頁面鏈接地址的裝置,該裝置在瀏覽器上加載原始網(wǎng)頁頁面之后,通過觸發(fā)用于模擬原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件,對(duì)原始網(wǎng)頁頁面進(jìn)行監(jiān)聽,當(dāng)監(jiān)聽到原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)請(qǐng)求的情況下,阻止原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)以終止目標(biāo)網(wǎng)頁頁面的加載,從而阻止加載多余的內(nèi)容,不需要消耗過多的資源在多余的頁面加載請(qǐng)求上,同時(shí)截獲原始網(wǎng)頁頁面的跳轉(zhuǎn)請(qǐng)求以讀取目標(biāo)網(wǎng)頁頁面的鏈接地址。由于上述裝置中利用phantomjs構(gòu)建一個(gè)瀏覽平臺(tái)加載原始網(wǎng)頁頁面,不再請(qǐng)求多余的圖片、多媒體等資源,加快了原始網(wǎng)頁頁面的加載速度,上述阻止原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)以終止目標(biāo)網(wǎng)頁頁面的加載,并不需要消耗過的資源在多余的頁面加載請(qǐng)求上,因此加快了最終獲取目標(biāo)網(wǎng)頁頁面鏈接地址的速度,進(jìn)而解決了現(xiàn)有技術(shù)中獲取網(wǎng)頁頁面鏈接地址效率差的問題,克服了一些js生成的鏈接難以被爬蟲獲取到的問題,達(dá)到了高效的獲取網(wǎng)頁頁面鏈接地址的效果。本發(fā)明在多數(shù)情況下足以滿足爬蟲的需求,并節(jié)省了網(wǎng)絡(luò)請(qǐng)求資源,能使獲取目標(biāo)網(wǎng)頁頁面的鏈接地址的效率提高一個(gè)檔次,能夠?qū)崿F(xiàn)高效的獲取網(wǎng)頁頁面鏈接地址。
[0095]需要說明的是,對(duì)于前述的各方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。
[0096]在上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。
[0097]在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的裝置,可通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性或其它的形式。
[0098]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
[0099]另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
[0100]所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可為個(gè)人計(jì)算機(jī)、移動(dòng)終端、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、只讀存儲(chǔ)器(ROM,Read-OnlyMemory)、隨機(jī)存取存儲(chǔ)器(RAM, Random Access Memory)、移動(dòng)硬盤、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
[0101]以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種網(wǎng)頁頁面鏈接地址的獲取方法,其特征在于,包括: 加載原始網(wǎng)頁頁面; 觸發(fā)用于模擬所述原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件; 監(jiān)聽所述原始網(wǎng)頁頁面是否發(fā)生所述跳轉(zhuǎn)事件,在監(jiān)聽到所述原始網(wǎng)頁頁面發(fā)生所述跳轉(zhuǎn)事件的情況下,阻塞所述原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn),并截獲所述原始網(wǎng)頁頁面的頁面跳轉(zhuǎn)請(qǐng)求; 從所述頁面跳轉(zhuǎn)請(qǐng)求中讀取所述原始網(wǎng)頁頁面所要跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁頁面的鏈接地址。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,在加載原始網(wǎng)頁頁面之前,所述方法還包括: 加載用于阻塞所述原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)的阻塞功能函數(shù),并加載用于監(jiān)聽所述跳轉(zhuǎn)事件以及捕獲所述目標(biāo)網(wǎng)頁頁面的鏈接地址的監(jiān)控功能函數(shù); 其中,在加載所述原始網(wǎng)頁頁面成功之后,啟動(dòng)所述阻塞功能函數(shù)。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,觸發(fā)用于模擬所述原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件包括: 通過調(diào)用創(chuàng)建事件函數(shù)創(chuàng)建所述原始網(wǎng)頁頁面的文檔對(duì)象模型如!!!元素的點(diǎn)擊事件; 通過調(diào)用調(diào)度事件函數(shù)觸發(fā)所述原始網(wǎng)頁頁面的如!!!元素的點(diǎn)擊事件。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,在監(jiān)聽到所述原始網(wǎng)頁頁面發(fā)生所述跳轉(zhuǎn)事件的情況下,阻塞所述原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)的步驟包括: 通過調(diào)用判斷函數(shù)判斷是否觸發(fā)所述原始網(wǎng)頁頁面的頁面跳轉(zhuǎn)請(qǐng)求; 在判斷結(jié)果為觸發(fā)所述頁面跳轉(zhuǎn)請(qǐng)求的情況下,通過調(diào)用所述阻塞功能函數(shù)阻止加載所述頁面跳轉(zhuǎn)請(qǐng)求,使得阻塞所述原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,在通過調(diào)用創(chuàng)建事件函數(shù)創(chuàng)建所述原始網(wǎng)頁頁面的文檔對(duì)象模型如!!!元素的點(diǎn)擊事件之前,所述方法還包括: 通過調(diào)用獲取函數(shù)獲取所述原始網(wǎng)頁頁面的如!!!元素。
6.根據(jù)權(quán)利要求3所述的方法,其特征在于,在通過調(diào)用創(chuàng)建事件函數(shù)創(chuàng)建所述原始網(wǎng)頁頁面的文檔對(duì)象模型如!!!元素的點(diǎn)擊事件之后,所述方法還包括: 通過調(diào)用非新建窗口函數(shù)將所述原始網(wǎng)頁頁面重寫為非新建窗口的形式,并改寫所述原始網(wǎng)頁頁面的預(yù)設(shè)標(biāo)簽的目標(biāo)屬性為自適應(yīng)形式,其中,所述非新建窗口函數(shù)和所述預(yù)設(shè)標(biāo)簽的目標(biāo)屬性用于將獲取到的所述目標(biāo)網(wǎng)頁頁面的鏈接地址顯示在所述原始網(wǎng)頁頁面上。
7.—種網(wǎng)頁頁面鏈接地址的獲取裝置,其特征在于,包括: 第一加載模塊,用于加載原始網(wǎng)頁頁面; 點(diǎn)擊模塊,用于觸發(fā)用于模擬所述原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)事件的點(diǎn)擊事件; 截獲模塊,用于監(jiān)聽所述原始網(wǎng)頁頁面是否發(fā)生所述跳轉(zhuǎn)事件,在監(jiān)聽到所述原始網(wǎng)頁頁面發(fā)生所述跳轉(zhuǎn)事件的情況下,阻塞所述原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn),并截獲所述原始網(wǎng)頁頁面的頁面跳轉(zhuǎn)請(qǐng)求; 讀取模塊,用于從所述頁面跳轉(zhuǎn)請(qǐng)求中讀取所述原始網(wǎng)頁頁面所要跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁頁面的鏈接地址。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述裝置還包括: 第二加載模塊,用于在加載原始網(wǎng)頁頁面之前,加載用于阻塞所述原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)的阻塞功能函數(shù),并加載用于監(jiān)聽所述跳轉(zhuǎn)事件以及捕獲所述目標(biāo)網(wǎng)頁頁面的鏈接地址的監(jiān)控功能函數(shù); 其中,在加載所述原始網(wǎng)頁頁面成功之后,啟動(dòng)所述阻塞功能函數(shù)。
9.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述點(diǎn)擊模塊包括: 創(chuàng)建單元,用于通過調(diào)用創(chuàng)建事件函數(shù)創(chuàng)建所述原始網(wǎng)頁頁面的文檔對(duì)象模型如!!!元素的點(diǎn)擊事件; 觸發(fā)單元,用于通過調(diào)用調(diào)度事件函數(shù)觸發(fā)所述原始網(wǎng)頁頁面的(10111元素的點(diǎn)擊事件。
10.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述截獲模塊包括: 判斷單元,用于通過調(diào)用判斷函數(shù)判斷是否觸發(fā)所述原始網(wǎng)頁頁面的頁面跳轉(zhuǎn)請(qǐng)求;阻塞單元,用于在判斷結(jié)果為觸發(fā)所述頁面跳轉(zhuǎn)請(qǐng)求的情況下,通過調(diào)用所述阻塞功能函數(shù)阻止加載所述頁面跳轉(zhuǎn)請(qǐng)求,使得阻塞所述原始網(wǎng)頁頁面發(fā)生跳轉(zhuǎn)。
11.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述裝置還包括: 獲取模塊,用于在通過調(diào)用創(chuàng)建事件函數(shù)創(chuàng)建所述原始網(wǎng)頁頁面的如!!!元素的點(diǎn)擊事件之前,通過調(diào)用獲取函數(shù)獲取所述原始網(wǎng)頁頁面的(10111元素。
12.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述點(diǎn)擊模塊還包括: 調(diào)用單元,用于在通過調(diào)用創(chuàng)建事件函數(shù)創(chuàng)建所述原始網(wǎng)頁頁面的(10111元素的點(diǎn)擊事件之后,通過調(diào)用非新建窗口函數(shù)將所述原始網(wǎng)頁頁面重寫為非新建窗口的形式,并改寫所述原始網(wǎng)頁頁面的預(yù)設(shè)標(biāo)簽的目標(biāo)屬性為自適應(yīng)形式,其中,所述非新建窗口函數(shù)和所述預(yù)設(shè)標(biāo)簽的目標(biāo)屬性用于將獲取到的所述目標(biāo)網(wǎng)頁頁面的鏈接地址顯示在所述原始網(wǎng)頁頁面上。
【文檔編號(hào)】G06F17/30GK104408204SQ201410802023
【公開日】2015年3月11日 申請(qǐng)日期:2014年12月18日 優(yōu)先權(quán)日:2014年12月18日
【發(fā)明者】李浛天 申請(qǐng)人:北京國雙科技有限公司