本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,特別是涉及一種爬取動態(tài)網(wǎng)頁的方法及裝置。
背景技術(shù):
網(wǎng)絡(luò)爬蟲是一種自動獲取網(wǎng)頁內(nèi)容的程序,是搜索引擎的重要組成部分。傳統(tǒng)的爬蟲策略是從一個或若干初始網(wǎng)頁的URL(Uniform Resource Locator,統(tǒng)一資源定位符)開始,在抓取網(wǎng)頁的過程中,不斷從當(dāng)前頁面上抽取新的URL放入隊(duì)列,直到滿足系統(tǒng)的一定停止條件才停止。通俗的講,也就是通過源碼解析來獲得想要的內(nèi)容。但是,由于只有靜態(tài)網(wǎng)頁中的內(nèi)容全部記錄在網(wǎng)頁源碼中,而動態(tài)網(wǎng)頁中的內(nèi)容并不全部記錄在網(wǎng)頁源碼中,所以現(xiàn)有的這種爬取網(wǎng)頁內(nèi)容的方式無法獲取網(wǎng)站中的所有內(nèi)容,從而使得爬蟲爬取網(wǎng)站信息的完整性降低。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供的爬取動態(tài)網(wǎng)頁的方法及裝置,能夠爬取動態(tài)網(wǎng)頁中的動態(tài)數(shù)據(jù)。
本發(fā)明的目的是采用以下技術(shù)方案來實(shí)現(xiàn)的:
一方面,本發(fā)明提供了一種爬取動態(tài)網(wǎng)頁的方法,所述方法包括:
在獲取需要爬取的網(wǎng)頁的統(tǒng)一資源定位符URL之后,利用無界面瀏覽器爬取獲取的URL的網(wǎng)頁內(nèi)容;
利用解析引擎對爬取的網(wǎng)頁內(nèi)容進(jìn)行解析;
若所述網(wǎng)頁內(nèi)容中含有觸發(fā)加載動態(tài)數(shù)據(jù)的特征信息,則通過所述無界面瀏覽器的模擬點(diǎn)擊事件接口觸發(fā)所述特征信息對應(yīng)的點(diǎn)擊事件;
爬取所述點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù)。
可選的,在爬取所述點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù)之后,所述方法還包括:
利用解析引擎對所述動態(tài)數(shù)據(jù)進(jìn)行解析;
若所述動態(tài)數(shù)據(jù)中含有特征信息,則繼續(xù)通過所述模擬點(diǎn)擊事件接口觸發(fā)所述特征信息對應(yīng)的點(diǎn)擊事件。
可選的,在利用解析引擎對爬取的網(wǎng)頁內(nèi)容進(jìn)行解析之后,所述方法還包括:
將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲;
在利用解析引擎對所述動態(tài)數(shù)據(jù)進(jìn)行解析之后,所述方法還包括:
將解析出的除所述特征信息之外的數(shù)據(jù)進(jìn)行存儲。
可選的,在將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲之后,所述方法還包括:
檢測所述解析出的除所述特征信息之外的數(shù)據(jù)中是否含有其他URL;
若含有其他URL,則利用所述無界面瀏覽器爬取所述其他URL的網(wǎng)頁內(nèi)容。
可選的,在將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲之后,所述方法還包括:
在后續(xù)爬取URL的網(wǎng)頁內(nèi)容之前,檢測存儲的已爬URL中是否含有待爬取的URL;
若含有所述待爬取的URL,則放棄爬取所述待爬取的URL的網(wǎng)頁內(nèi)容;
若沒有所述待爬取的URL,則利用所述無界面瀏覽器爬取所述待爬取的URL的網(wǎng)頁內(nèi)容。
可選的,在將解析出的除所述特征信息之外的數(shù)據(jù)進(jìn)行存儲之后,所述方法還包括:
將所述解析出的除所述特征信息之外的數(shù)據(jù)以日志格式進(jìn)行導(dǎo)出,獲得網(wǎng)頁爬取日志。
可選的,所述無界面瀏覽器為phantom JS瀏覽器。
另一方面,本發(fā)明提供了一種爬取動態(tài)網(wǎng)頁的裝置,所述裝置包括:
爬取單元,用于在獲取需要爬取的網(wǎng)頁的統(tǒng)一資源定位符URL之后,利用無界面瀏覽器爬取獲取的URL的網(wǎng)頁內(nèi)容;
解析單元,用于利用解析引擎對所述爬取單元爬取的網(wǎng)頁內(nèi)容進(jìn)行解析;
觸發(fā)單元,用于當(dāng)所述解析單元的解析結(jié)果為所述網(wǎng)頁內(nèi)容中含有觸發(fā)加載動態(tài)數(shù)據(jù)的特征信息時,通過所述無界面瀏覽器的模擬點(diǎn)擊事件接口觸發(fā)所述特征信息對應(yīng)的點(diǎn)擊事件;
所述爬取單元還用于爬取所述觸發(fā)單元觸發(fā)的所述點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù)。
可選的,所述解析單元還用于在所述爬取單元爬取所述點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù)之后,利用解析引擎對所述動態(tài)數(shù)據(jù)進(jìn)行解析;
觸發(fā)單元還用于當(dāng)所述解析單元的解析結(jié)果為所述動態(tài)數(shù)據(jù)中含有特征信息時,繼續(xù)通過所述模擬點(diǎn)擊事件接口觸發(fā)所述特征信息對應(yīng)的點(diǎn)擊事件。
可選的,所述裝置還包括:
存儲單元,用于在利用解析引擎對爬取的網(wǎng)頁內(nèi)容進(jìn)行解析之后,將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲;
所述存儲單元還用于在利用解析引擎對所述動態(tài)數(shù)據(jù)進(jìn)行解析之后,將解析出的除所述特征信息之外的數(shù)據(jù)進(jìn)行存儲。
可選的,所述裝置還包括:
第一檢測單元,用于在所述存儲單元將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲之后,檢測所述解析出的除所述特征信息之外的數(shù)據(jù)中是否含有其他URL;
所述爬取單元還用于當(dāng)所述第一檢測單元的檢測結(jié)果為含有其他URL時,利用所述無界面瀏覽器爬取所述其他URL的網(wǎng)頁內(nèi)容。
可選的,所述裝置還包括:
第二檢測單元,用于在所述存儲單元將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲之后,在后續(xù)爬取URL的網(wǎng)頁內(nèi)容之前,檢測存儲的已爬URL中是否含有待爬取的URL;
放棄單元,用于當(dāng)所述第二檢測單元的檢測結(jié)果為含有所述待爬取的URL時,放棄爬取所述待爬取的URL的網(wǎng)頁內(nèi)容;
所述爬取單元還用于當(dāng)所述第二檢測單元的檢測結(jié)果為沒有所述待爬取的URL時,利用所述無界面瀏覽器爬取所述待爬取的URL的網(wǎng)頁內(nèi)容。
可選的,所述裝置還包括:
導(dǎo)出單元,用于在所述存儲單元將解析出的除所述特征信息之外的數(shù)據(jù)進(jìn)行存儲之后,將所述解析出的除所述特征信息之外的數(shù)據(jù)以日志格式進(jìn)行導(dǎo)出,獲得網(wǎng)頁爬取日志。
可選的,所述無界面瀏覽器為phantom JS瀏覽器。
借由上述技術(shù)方案,本發(fā)明提供的爬取動態(tài)網(wǎng)頁的方法及裝置,能夠利用無界面瀏覽器爬取網(wǎng)頁內(nèi)容,并且在利用解析引擎對爬取的網(wǎng)頁內(nèi)容進(jìn)行解析時,不僅解析網(wǎng)頁內(nèi)容中是否含有其他URL、文件等,還會解析網(wǎng)頁內(nèi)容中是否含有觸發(fā)加密動態(tài)數(shù)據(jù)的特征信息,由此當(dāng)含有這些特征信息時,通過無界面瀏覽器的模擬點(diǎn)擊事件接口模擬用戶基于網(wǎng)頁的點(diǎn)擊操作,從而觸發(fā)這些特征信息對應(yīng)的點(diǎn)擊事件,使得無界面瀏覽器可以加載點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù),進(jìn)而能夠爬取動態(tài)網(wǎng)頁中的動態(tài)數(shù)據(jù),提高了爬蟲爬取網(wǎng)頁數(shù)據(jù)的完整性。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說明
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了本發(fā)明實(shí)施例提供的一種爬取動態(tài)網(wǎng)頁的方法的流程圖;
圖2示出了本發(fā)明實(shí)施例提供的另一種爬取動態(tài)網(wǎng)頁的方法的流程圖;
圖3示出了本發(fā)明實(shí)施例提供的一種爬取動態(tài)網(wǎng)頁的裝置的組成框圖;
圖4示出了本發(fā)明實(shí)施例提供的另一種爬取動態(tài)網(wǎng)頁的裝置的組成框圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
為了爬取動態(tài)網(wǎng)頁中的動態(tài)數(shù)據(jù),本發(fā)明實(shí)施例提供了一種爬取動態(tài)網(wǎng)頁的方法,如圖1所示,所述方法包括:
101、在獲取需要爬取的網(wǎng)頁的URL之后,利用無界面瀏覽器爬取獲取的URL的網(wǎng)頁內(nèi)容。
在實(shí)際應(yīng)用中可以將需要爬取的網(wǎng)站的基本信息存儲至關(guān)系型數(shù)據(jù)庫(例如MySQL)中,也可以存儲至其他類型的數(shù)據(jù)庫中,例如Redis、內(nèi)存儲數(shù)據(jù)庫等。網(wǎng)站的基本信息包括網(wǎng)站的名稱、網(wǎng)站的域名、網(wǎng)站首頁的URL以及網(wǎng)站中的其他URL等信息。此外,無界面瀏覽器是一種沒有顯示界面的瀏覽器,但是能夠通過提供的各種接口,實(shí)現(xiàn)一般界面瀏覽器所能實(shí)現(xiàn)的除界面顯示外的所有功能,例如可以訪問網(wǎng)站服務(wù)器。本發(fā)明實(shí)施例中的無界面瀏覽器可以為phantom JS瀏覽器,也可以為其他無界面瀏覽器,其具體使用的瀏覽器不做限定。
網(wǎng)頁爬取設(shè)備可以從數(shù)據(jù)庫中讀取需要爬取的網(wǎng)頁的URL(例如網(wǎng)站首頁的URL),然后通過訪問無界面瀏覽器特定接口的方式實(shí)現(xiàn)對該URL網(wǎng)頁內(nèi)容的爬取操作。其中,網(wǎng)頁內(nèi)容包括HTML(HyperText Markup Language,超文本標(biāo)記語言)頁面、文件以及圖片等。
需要說明的是,網(wǎng)頁爬取設(shè)備在從數(shù)據(jù)庫中讀取需要爬取的URL時,可以只讀取一個URL,也可以并發(fā)讀取多個URL,并且并發(fā)讀取的多個URL可以為同一個網(wǎng)站的URL,也可以為不同網(wǎng)站的URL。相應(yīng)的,在利用無界面瀏覽器爬取網(wǎng)頁內(nèi)容時,可以只爬取一個URL的網(wǎng)頁內(nèi)容,也可以并發(fā)爬取多個URL的網(wǎng)頁內(nèi)容。
需要補(bǔ)充的是,存儲網(wǎng)站基本信息的數(shù)據(jù)庫可以位于網(wǎng)頁爬取設(shè)備中,也可以為獨(dú)立于網(wǎng)頁爬取設(shè)備的存儲設(shè)備,其具體表現(xiàn)形式在此不做限定。
102、利用解析引擎對爬取的網(wǎng)頁內(nèi)容進(jìn)行解析。
在爬取網(wǎng)頁內(nèi)容后,可以將網(wǎng)頁內(nèi)容交由解析引擎進(jìn)行解析;當(dāng)爬取的網(wǎng)頁是靜態(tài)網(wǎng)頁時,可以從中獲取鏈接(即其他URL)、文件等數(shù)據(jù);當(dāng)爬取的網(wǎng)頁是動態(tài)網(wǎng)頁時,除了可以解析出上述數(shù)據(jù)外,還可以解析出觸發(fā)加載動態(tài)數(shù)據(jù)的特征信息,例如用于完成用戶查詢、提交等動作的控件。
103、若所述網(wǎng)頁內(nèi)容中含有觸發(fā)加載動態(tài)數(shù)據(jù)的特征信息,則通過所述無界面瀏覽器的模擬點(diǎn)擊事件接口觸發(fā)所述特征信息對應(yīng)的點(diǎn)擊事件。
當(dāng)確定解析引擎的解析結(jié)果中含有觸發(fā)加載動態(tài)數(shù)據(jù)的特征信息時,網(wǎng)頁爬取設(shè)備可以確定當(dāng)前爬取的網(wǎng)頁為動態(tài)網(wǎng)頁。為了獲取完整的網(wǎng)頁數(shù)據(jù),網(wǎng)頁爬取設(shè)備可以通過無界面瀏覽器的模擬點(diǎn)擊事件接口來模擬用戶的點(diǎn)擊事件,觸發(fā)執(zhí)行所述特征信息對應(yīng)的點(diǎn)擊事件。其中,點(diǎn)擊事件包括鍵盤點(diǎn)擊事件和鼠標(biāo)點(diǎn)擊事件。
示例性的,若網(wǎng)頁內(nèi)容中含有用于完成提交動作的按鈕,則網(wǎng)頁爬取設(shè)備可以通過無界面瀏覽器的模擬點(diǎn)擊事件接口模擬用戶在網(wǎng)頁中點(diǎn)擊提交,以使得無界面瀏覽器將提交請求發(fā)送給網(wǎng)站服務(wù)器,從而網(wǎng)站服務(wù)器返回提交后的網(wǎng)頁數(shù)據(jù)。
此外,在實(shí)際應(yīng)用中,還有用程序觸發(fā)網(wǎng)頁訪問的現(xiàn)象,因此解析引擎在對網(wǎng)頁內(nèi)容進(jìn)行解析時,還可以解析是否含有程序觸發(fā)的接口信息,若有,則可以利用無界面瀏覽器編寫程序觸發(fā)無界面瀏覽器訪問網(wǎng)站服務(wù)器,從而爬取網(wǎng)站服務(wù)器返回的內(nèi)容。
104、爬取所述點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù)。
當(dāng)觸發(fā)特征信息對應(yīng)的點(diǎn)擊事件使得無界面瀏覽器向網(wǎng)站服務(wù)器申請加載動態(tài)數(shù)據(jù)后,網(wǎng)頁爬取設(shè)備可以利用無界面瀏覽器爬取所述動態(tài)數(shù)據(jù)。其中,加載的動態(tài)數(shù)據(jù)可能是一個全新的網(wǎng)頁,也可能是在原網(wǎng)頁的基礎(chǔ)的上增加了一些數(shù)據(jù)。
本發(fā)明實(shí)施例提供的爬取動態(tài)網(wǎng)頁的方法,能夠利用無界面瀏覽器爬取網(wǎng)頁內(nèi)容,并且在利用解析引擎對爬取的網(wǎng)頁內(nèi)容進(jìn)行解析時,不僅解析網(wǎng)頁內(nèi)容中是否含有其他URL、文件等,還會解析網(wǎng)頁內(nèi)容中是否含有觸發(fā)加密動態(tài)數(shù)據(jù)的特征信息,由此當(dāng)含有這些特征信息時,通過無界面瀏覽器的模擬點(diǎn)擊事件接口模擬用戶基于網(wǎng)頁的點(diǎn)擊操作,從而觸發(fā)這些特征信息對應(yīng)的點(diǎn)擊事件,使得無界面瀏覽器可以加載點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù),進(jìn)而能夠爬取動態(tài)網(wǎng)頁中的動態(tài)數(shù)據(jù),提高了爬蟲爬取網(wǎng)頁數(shù)據(jù)的完整性。
進(jìn)一步的,依據(jù)圖1所示的方法,本發(fā)明的另一個實(shí)施例還提供了一種爬取動態(tài)網(wǎng)頁的方法,如圖2所示,所述方法主要包括:
201、在獲取需要爬取的網(wǎng)頁的URL之后,利用無界面瀏覽器爬取獲取的URL的網(wǎng)頁內(nèi)容。
本步驟的具體實(shí)現(xiàn)方式與圖1中步驟101的具體實(shí)現(xiàn)方式一致,在此不再贅述。
202、利用解析引擎對爬取的網(wǎng)頁內(nèi)容進(jìn)行解析。
當(dāng)當(dāng)前網(wǎng)頁為靜態(tài)網(wǎng)頁時,解析結(jié)果可能包括鏈接(即其他URL)、文件等信息,當(dāng)當(dāng)前網(wǎng)頁為動態(tài)網(wǎng)頁時,解析結(jié)果除了包括鏈接、文件外,還會包括用于觸發(fā)加載動態(tài)數(shù)據(jù)的特征信息。由于解析出的鏈接、文件等信息可以用于后續(xù)爬蟲或者網(wǎng)頁掃描等操作,所以可以將解析出的鏈接、文件等信息(即除所述特征信息之外的數(shù)據(jù))進(jìn)行存儲。另外,為了避免后續(xù)發(fā)生重復(fù)爬蟲的現(xiàn)象,可以將已爬取的URL進(jìn)行記錄,也就是說,在對網(wǎng)頁內(nèi)容進(jìn)行解析后,還可以將當(dāng)前爬取的URL進(jìn)行存儲。由此在后續(xù)爬取URL的網(wǎng)頁內(nèi)容之前,網(wǎng)頁爬取設(shè)備可以先檢測存儲的已爬URL中是否含有待爬取的URL;若含有所述待爬取的URL,則放棄爬取所述待爬取的URL的網(wǎng)頁內(nèi)容;若沒有所述待爬取的URL,則利用所述無界面瀏覽器爬取所述待爬取的URL的網(wǎng)頁內(nèi)容。
此外,網(wǎng)頁爬取設(shè)備還可以將網(wǎng)頁爬取的狀態(tài)進(jìn)行存儲,以便用戶可以實(shí)時獲知網(wǎng)頁爬取狀態(tài)。其中爬取狀態(tài)主要包括:正在爬取、已經(jīng)爬取完畢。
需要補(bǔ)充的是,可以將除特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL存儲至一個數(shù)據(jù)庫中,在實(shí)際應(yīng)用中,該數(shù)據(jù)庫可以與存儲網(wǎng)站基本信息的數(shù)據(jù)庫相同,也可以不同。具體的,存儲除特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL的數(shù)據(jù)庫可以為key-value數(shù)據(jù)庫,例如為Redis,也可以為其他類型的數(shù)據(jù)庫。
為了進(jìn)一步爬取網(wǎng)站中的其他網(wǎng)頁,在將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲之后,網(wǎng)頁爬取設(shè)備可以檢測所述解析出的除所述特征信息之外的數(shù)據(jù)中是否含有其他URL;若含有其他URL,則利用所述無界面瀏覽器爬取所述其他URL的網(wǎng)頁內(nèi)容;若沒有其他URL,則可以檢測存儲的網(wǎng)站的基本信息中是否還有其他URL。
具體的,由于之前解析出的除所述特征信息之外的數(shù)據(jù)中可能含有鏈接(即其他URL),所以可以從存儲的除所述特征信息之外的數(shù)據(jù)中查找需要爬取的其他URL。
進(jìn)一步的,為了便于后續(xù)掃描引擎對網(wǎng)頁內(nèi)容進(jìn)行掃描,以及便于用戶查看網(wǎng)頁內(nèi)容,網(wǎng)頁爬取設(shè)備可以在將解析出的除所述特征信息之外的數(shù)據(jù)進(jìn)行存儲之后,將所述解析出的除所述特征信息之外的數(shù)據(jù)以日志格式進(jìn)行導(dǎo)出,獲得網(wǎng)頁爬取日志,以便對網(wǎng)頁爬取日志進(jìn)行需要的操作。
203、若所述網(wǎng)頁內(nèi)容中含有觸發(fā)加載動態(tài)數(shù)據(jù)的特征信息,則通過所述無界面瀏覽器的模擬點(diǎn)擊事件接口觸發(fā)所述特征信息對應(yīng)的點(diǎn)擊事件。
本步驟的具體實(shí)現(xiàn)方式與圖1中步驟103的具體實(shí)現(xiàn)方式一致,在此不再贅述。
若所述網(wǎng)頁內(nèi)容中沒有觸發(fā)加載動態(tài)數(shù)據(jù)的特征信息,則執(zhí)行步驟207。
204、爬取所述點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù)。
本步驟的具體實(shí)現(xiàn)方式與圖1中步驟104的具體實(shí)現(xiàn)方式一致,在此不再贅述。
205、利用解析引擎對所述動態(tài)數(shù)據(jù)進(jìn)行解析。
在爬取動態(tài)數(shù)據(jù)后,可以利用解析引擎繼續(xù)解析爬取的動態(tài)數(shù)據(jù),以便解析出鏈接、文件,甚至動態(tài)數(shù)據(jù)中包含的其他用于觸發(fā)加載動態(tài)數(shù)據(jù)的特征信息。
此外,與上述步驟202相似的,本步驟在對動態(tài)數(shù)據(jù)進(jìn)行解析后,也可以將解析出的除所述特征信息之外的數(shù)據(jù)進(jìn)行存儲,并將本步驟中解析出的除所述特征信息之外的數(shù)據(jù)與將步驟202中解析出的除所述特征信息之外的數(shù)據(jù)存儲至同一個數(shù)據(jù)庫中。
206、若所述動態(tài)數(shù)據(jù)中含有特征信息,則繼續(xù)通過所述模擬點(diǎn)擊事件接口觸發(fā)所述特征信息對應(yīng)的點(diǎn)擊事件。
當(dāng)爬取的動態(tài)數(shù)據(jù)中也包含用于觸發(fā)加載動態(tài)數(shù)據(jù)的特征信息時,為了爬取完整的網(wǎng)頁數(shù)據(jù),還需要繼續(xù)通過模擬點(diǎn)擊事件接口觸發(fā)特征信息對應(yīng)的點(diǎn)擊事件,以便繼續(xù)爬取其他動態(tài)數(shù)據(jù),直至爬取完當(dāng)前網(wǎng)頁的所有數(shù)據(jù)后,才爬取其他URL。也就是說,執(zhí)行完本步驟后,繼續(xù)執(zhí)行步驟204,直至步驟205中解析的結(jié)果為不包含用于觸發(fā)加載動態(tài)數(shù)據(jù)的特征信息時,執(zhí)行步驟207。
207、利用無界面瀏覽器爬取其他URL的網(wǎng)頁內(nèi)容。
其中,爬取所述其他URL的網(wǎng)頁內(nèi)容后,繼續(xù)執(zhí)行步驟202。
本發(fā)明實(shí)施例提供的爬取動態(tài)網(wǎng)頁的方法,在爬取第一層動態(tài)數(shù)據(jù)后,通過繼續(xù)解析爬取的動態(tài)數(shù)據(jù)的方式來檢測第一層動態(tài)數(shù)據(jù)中是否還有第二層動態(tài)數(shù)據(jù),若含有第二層動態(tài)數(shù)據(jù),則繼續(xù)進(jìn)行解析,直至爬取一個網(wǎng)頁的所有動態(tài)數(shù)據(jù)。此外,在解析出鏈接后,還繼續(xù)爬取鏈接所屬網(wǎng)頁。由此可知,本發(fā)明實(shí)施例可以爬取網(wǎng)站中所有的網(wǎng)頁數(shù)據(jù),能夠進(jìn)一步提高爬蟲爬取網(wǎng)頁數(shù)據(jù)的完整性。
進(jìn)一步的,依據(jù)上述方法實(shí)施例,本發(fā)明的另一個實(shí)施例還提供了一種爬取動態(tài)網(wǎng)頁的裝置,如圖3所示,所述裝置主要包括:爬取單元31、解析單元32以及觸發(fā)單元33。其中,
爬取單元31,用于在獲取需要爬取的網(wǎng)頁的統(tǒng)一資源定位符URL之后,利用無界面瀏覽器爬取獲取的URL的網(wǎng)頁內(nèi)容;
在實(shí)際應(yīng)用中可以將需要爬取的網(wǎng)站的基本信息存儲至關(guān)系型數(shù)據(jù)庫(例如MySQL)中,也可以存儲至其他類型的數(shù)據(jù)庫中,例如Redis、內(nèi)存儲數(shù)據(jù)庫等。網(wǎng)站的基本信息包括網(wǎng)站的名稱、網(wǎng)站的域名、網(wǎng)站首頁的URL以及網(wǎng)站中的其他URL等信息。
解析單元32,用于利用解析引擎對所述爬取單元31爬取的網(wǎng)頁內(nèi)容進(jìn)行解析;
觸發(fā)單元33,用于當(dāng)所述解析單元32的解析結(jié)果為所述網(wǎng)頁內(nèi)容中含有觸發(fā)加載動態(tài)數(shù)據(jù)的特征信息時,通過所述無界面瀏覽器的模擬點(diǎn)擊事件接口觸發(fā)所述特征信息對應(yīng)的點(diǎn)擊事件;
所述爬取單元31還用于爬取所述觸發(fā)單元33觸發(fā)的所述點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù)。
可選的,所述解析單元32還用于在所述爬取單元31爬取所述點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù)之后,利用解析引擎對所述動態(tài)數(shù)據(jù)進(jìn)行解析;
觸發(fā)單元33還用于當(dāng)所述解析單元32的解析結(jié)果為所述動態(tài)數(shù)據(jù)中含有特征信息時,繼續(xù)通過所述模擬點(diǎn)擊事件接口觸發(fā)所述特征信息對應(yīng)的點(diǎn)擊事件。
可選的,如圖4所示,所述裝置還包括:
存儲單元34,用于在利用解析引擎對爬取的網(wǎng)頁內(nèi)容進(jìn)行解析之后,將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲;
所述存儲單元34還用于在利用解析引擎對所述動態(tài)數(shù)據(jù)進(jìn)行解析之后,將解析出的除所述特征信息之外的數(shù)據(jù)進(jìn)行存儲。
需要補(bǔ)充的是,可以將除特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL存儲至一個數(shù)據(jù)庫中,在實(shí)際應(yīng)用中,該數(shù)據(jù)庫可以與存儲網(wǎng)站基本信息的數(shù)據(jù)庫相同,也可以不同。具體的,存儲除特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL的數(shù)據(jù)庫可以為key-value數(shù)據(jù)庫,例如為Redis,也可以為其他類型的數(shù)據(jù)庫。
可選的,如圖4所示,所述裝置還包括:
第一檢測單元35,用于在所述存儲單元34將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲之后,檢測所述解析出的除所述特征信息之外的數(shù)據(jù)中是否含有其他URL;
所述爬取單元31還用于當(dāng)所述第一檢測單元35的檢測結(jié)果為含有其他URL時,利用所述無界面瀏覽器爬取所述其他URL的網(wǎng)頁內(nèi)容。
可選的,如圖4所示,所述裝置還包括:
第二檢測單元36,用于在所述存儲單元34將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲之后,在后續(xù)爬取URL的網(wǎng)頁內(nèi)容之前,檢測存儲的已爬URL中是否含有待爬取的URL;
放棄單元37,用于當(dāng)所述第二檢測單元36的檢測結(jié)果為含有所述待爬取的URL時,放棄爬取所述待爬取的URL的網(wǎng)頁內(nèi)容;
所述爬取單元31還用于當(dāng)所述第二檢測單元36的檢測結(jié)果為沒有所述待爬取的URL時,利用所述無界面瀏覽器爬取所述待爬取的URL的網(wǎng)頁內(nèi)容。
可選的,如圖4所示,所述裝置還包括:
導(dǎo)出單元38,用于在所述存儲單元34將解析出的除所述特征信息之外的數(shù)據(jù)進(jìn)行存儲之后,將所述解析出的除所述特征信息之外的數(shù)據(jù)以日志格式進(jìn)行導(dǎo)出,獲得網(wǎng)頁爬取日志。
獲得網(wǎng)頁爬取日志后,可以利用掃描引擎對網(wǎng)頁爬取日志進(jìn)行掃描,以檢測網(wǎng)頁爬取日志對應(yīng)的網(wǎng)頁是否安全。
可選的,所述無界面瀏覽器為phantom JS瀏覽器。
本發(fā)明實(shí)施例提供的爬取動態(tài)網(wǎng)頁的裝置,能夠利用無界面瀏覽器爬取網(wǎng)頁內(nèi)容,并且在利用解析引擎對爬取的網(wǎng)頁內(nèi)容進(jìn)行解析時,不僅解析網(wǎng)頁內(nèi)容中是否含有其他URL、文件等,還會解析網(wǎng)頁內(nèi)容中是否含有觸發(fā)加密動態(tài)數(shù)據(jù)的特征信息,由此當(dāng)含有這些特征信息時,通過無界面瀏覽器的模擬點(diǎn)擊事件接口模擬用戶基于網(wǎng)頁的點(diǎn)擊操作,從而觸發(fā)這些特征信息對應(yīng)的點(diǎn)擊事件,使得無界面瀏覽器可以加載點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù),進(jìn)而能夠爬取動態(tài)網(wǎng)頁中的動態(tài)數(shù)據(jù),提高了爬蟲爬取網(wǎng)頁數(shù)據(jù)的完整性。在爬取第一層動態(tài)數(shù)據(jù)后,通過繼續(xù)解析爬取的動態(tài)數(shù)據(jù)的方式來檢測第一層動態(tài)數(shù)據(jù)中是否還有第二層動態(tài)數(shù)據(jù),若含有第二層動態(tài)數(shù)據(jù),則繼續(xù)進(jìn)行解析,直至爬取一個網(wǎng)頁的所有動態(tài)數(shù)據(jù)。此外,在解析出鏈接后,還繼續(xù)爬取鏈接所屬網(wǎng)頁。由此可知,本發(fā)明實(shí)施例可以爬取網(wǎng)站中所有的網(wǎng)頁數(shù)據(jù),能夠進(jìn)一步提高爬蟲爬取網(wǎng)頁數(shù)據(jù)的完整性。
本發(fā)明實(shí)施例還提供了:
A1、一種爬取動態(tài)網(wǎng)頁的方法,所述方法包括:
在獲取需要爬取的網(wǎng)頁的統(tǒng)一資源定位符URL之后,利用無界面瀏覽器爬取獲取的URL的網(wǎng)頁內(nèi)容;
利用解析引擎對爬取的網(wǎng)頁內(nèi)容進(jìn)行解析;
若所述網(wǎng)頁內(nèi)容中含有觸發(fā)加載動態(tài)數(shù)據(jù)的特征信息,則通過所述無界面瀏覽器的模擬點(diǎn)擊事件接口觸發(fā)所述特征信息對應(yīng)的點(diǎn)擊事件;
爬取所述點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù)。
A2、根據(jù)A1所述的方法,在爬取所述點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù)之后,所述方法還包括:
利用解析引擎對所述動態(tài)數(shù)據(jù)進(jìn)行解析;
若所述動態(tài)數(shù)據(jù)中含有特征信息,則繼續(xù)通過所述模擬點(diǎn)擊事件接口觸發(fā)所述特征信息對應(yīng)的點(diǎn)擊事件。
A3、根據(jù)A2所述的方法,在利用解析引擎對爬取的網(wǎng)頁內(nèi)容進(jìn)行解析之后,所述方法還包括:
將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲;
在利用解析引擎對所述動態(tài)數(shù)據(jù)進(jìn)行解析之后,所述方法還包括:
將解析出的除所述特征信息之外的數(shù)據(jù)進(jìn)行存儲。
A4、根據(jù)A3所述的方法,在將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲之后,所述方法還包括:
檢測所述解析出的除所述特征信息之外的數(shù)據(jù)中是否含有其他URL;
若含有其他URL,則利用所述無界面瀏覽器爬取所述其他URL的網(wǎng)頁內(nèi)容。
A5、根據(jù)A3所述的方法,在將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲之后,所述方法還包括:
在后續(xù)爬取URL的網(wǎng)頁內(nèi)容之前,檢測存儲的已爬URL中是否含有待爬取的URL;
若含有所述待爬取的URL,則放棄爬取所述待爬取的URL的網(wǎng)頁內(nèi)容;
若沒有所述待爬取的URL,則利用所述無界面瀏覽器爬取所述待爬取的URL的網(wǎng)頁內(nèi)容。
A6、根據(jù)A3所述的方法,在將解析出的除所述特征信息之外的數(shù)據(jù)進(jìn)行存儲之后,所述方法還包括:
將所述解析出的除所述特征信息之外的數(shù)據(jù)以日志格式進(jìn)行導(dǎo)出,獲得網(wǎng)頁爬取日志。
A7、根據(jù)A1至A6中任一項(xiàng)所述的方法,所述無界面瀏覽器為phantom JS瀏覽器。
B8、一種爬取動態(tài)網(wǎng)頁的裝置,所述裝置包括:
爬取單元,用于在獲取需要爬取的網(wǎng)頁的統(tǒng)一資源定位符URL之后,利用無界面瀏覽器爬取獲取的URL的網(wǎng)頁內(nèi)容;
解析單元,用于利用解析引擎對所述爬取單元爬取的網(wǎng)頁內(nèi)容進(jìn)行解析;
觸發(fā)單元,用于當(dāng)所述解析單元的解析結(jié)果為所述網(wǎng)頁內(nèi)容中含有觸發(fā)加載動態(tài)數(shù)據(jù)的特征信息時,通過所述無界面瀏覽器的模擬點(diǎn)擊事件接口觸發(fā)所述特征信息對應(yīng)的點(diǎn)擊事件;
所述爬取單元還用于爬取所述觸發(fā)單元觸發(fā)的所述點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù)。
B9、根據(jù)B8所述的裝置,所述解析單元還用于在所述爬取單元爬取所述點(diǎn)擊事件產(chǎn)生的動態(tài)數(shù)據(jù)之后,利用解析引擎對所述動態(tài)數(shù)據(jù)進(jìn)行解析;
觸發(fā)單元還用于當(dāng)所述解析單元的解析結(jié)果為所述動態(tài)數(shù)據(jù)中含有特征信息時,繼續(xù)通過所述模擬點(diǎn)擊事件接口觸發(fā)所述特征信息對應(yīng)的點(diǎn)擊事件。
B10、根據(jù)B9所述的裝置,所述裝置還包括:
存儲單元,用于在利用解析引擎對爬取的網(wǎng)頁內(nèi)容進(jìn)行解析之后,將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲;
所述存儲單元還用于在利用解析引擎對所述動態(tài)數(shù)據(jù)進(jìn)行解析之后,將解析出的除所述特征信息之外的數(shù)據(jù)進(jìn)行存儲。
B11、根據(jù)B10所述的裝置,所述裝置還包括:
第一檢測單元,用于在所述存儲單元將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲之后,檢測所述解析出的除所述特征信息之外的數(shù)據(jù)中是否含有其他URL;
所述爬取單元還用于當(dāng)所述第一檢測單元的檢測結(jié)果為含有其他URL時,利用所述無界面瀏覽器爬取所述其他URL的網(wǎng)頁內(nèi)容。
B12、根據(jù)B10所述的裝置,所述裝置還包括:
第二檢測單元,用于在所述存儲單元將解析出的除所述特征信息之外的數(shù)據(jù)以及當(dāng)前爬取的URL進(jìn)行存儲之后,在后續(xù)爬取URL的網(wǎng)頁內(nèi)容之前,檢測存儲的已爬URL中是否含有待爬取的URL;
放棄單元,用于當(dāng)所述第二檢測單元的檢測結(jié)果為含有所述待爬取的URL時,放棄爬取所述待爬取的URL的網(wǎng)頁內(nèi)容;
所述爬取單元還用于當(dāng)所述第二檢測單元的檢測結(jié)果為沒有所述待爬取的URL時,利用所述無界面瀏覽器爬取所述待爬取的URL的網(wǎng)頁內(nèi)容。
B13、根據(jù)B10所述的裝置,所述裝置還包括:
導(dǎo)出單元,用于在所述存儲單元將解析出的除所述特征信息之外的數(shù)據(jù)進(jìn)行存儲之后,將所述解析出的除所述特征信息之外的數(shù)據(jù)以日志格式進(jìn)行導(dǎo)出,獲得網(wǎng)頁爬取日志。
B14、根據(jù)B8至B13中任一項(xiàng)所述的裝置,所述無界面瀏覽器為phantom JS瀏覽器。
可以理解的是,上述方法及裝置中的相關(guān)特征可以相互參考。另外,上述實(shí)施例中的“第一”、“第二”等是用于區(qū)分各實(shí)施例,而并不代表各實(shí)施例的優(yōu)劣。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對應(yīng)過程,在此不再贅述。
在此提供的算法和顯示不與任何特定計算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實(shí)施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個或多個設(shè)備中。可以把實(shí)施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個或者多個處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的爬取動態(tài)網(wǎng)頁的方法及裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機(jī)程序和計算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲在計算機(jī)可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。