欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

網(wǎng)絡(luò)爬蟲的制作方法

文檔序號:6491900閱讀:386來源:國知局
網(wǎng)絡(luò)爬蟲的制作方法
【專利摘要】本發(fā)明公開了一種網(wǎng)絡(luò)爬蟲,包括一內(nèi)核以及一Ajax抓取配置,該內(nèi)核以及該Ajax抓取配置均集成有htmlunit,該Ajax抓取配置用于指定一網(wǎng)頁的地址以及該網(wǎng)頁中的待抓取的數(shù)據(jù),該內(nèi)核用于驅(qū)動搜索引擎,并基于該Ajax抓取配置提取該待抓取的數(shù)據(jù)。本發(fā)明能夠支持Ajax的執(zhí)行方式抓取網(wǎng)頁頁面的數(shù)據(jù),并且支持異步請求的技術(shù),可以使用JavaScript向服務(wù)器提出請求并處理響應(yīng),而且不會阻塞用戶。
【專利說明】網(wǎng)絡(luò)爬蟲
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種網(wǎng)絡(luò)爬蟲,特別是涉及一種能夠支持Ajax爬取并通過異步請求從網(wǎng)頁中提取數(shù)據(jù)的網(wǎng)絡(luò)爬蟲。
【背景技術(shù)】
[0002]傳統(tǒng)的網(wǎng)絡(luò)爬蟲能夠?qū)崿F(xiàn)非Ajax (—種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù))的爬取過程,即不需要模擬瀏覽器加載頁面并且執(zhí)行頁面中的JavaScript (—種動態(tài)、弱類型、基于原型的語言,通過瀏覽器可以直接執(zhí)行)腳本。而傳統(tǒng)的網(wǎng)絡(luò)爬蟲雖然能夠抓取網(wǎng)頁中的數(shù)據(jù),但是只能抓取同步請求的數(shù)據(jù),并不能及時的對異步請求進行響應(yīng)和處理,導(dǎo)致可能會阻塞用戶。

【發(fā)明內(nèi)容】

[0003]本發(fā)明要解決的技術(shù)問題是為了克服現(xiàn)有技術(shù)中傳統(tǒng)的網(wǎng)絡(luò)爬蟲不能對異步請求進行響應(yīng)和處理導(dǎo)致會阻塞用戶的缺陷,提供一種能夠支持Ajax爬取并通過異步請求從網(wǎng)頁中提取數(shù)據(jù)的網(wǎng)絡(luò)爬蟲。
[0004]本發(fā)明是通過下述技術(shù)方案來解決上述技術(shù)問題的:
[0005]本發(fā)明提供了一種網(wǎng)絡(luò)爬蟲,其特點在于,其包括一內(nèi)核以及一 Ajax抓取配置,該內(nèi)核以及該Ajax抓取配置均集成有htmlunit (—種開源的java (—種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言)頁面分析工具),該Ajax抓取配置用于指定一網(wǎng)頁的地址以及該網(wǎng)頁中的待抓取的數(shù)據(jù),該內(nèi)核用于驅(qū)動搜索引擎,并基于該Ajax抓取配置提取該待抓取的數(shù)據(jù)。
[0006]與傳統(tǒng)的網(wǎng)絡(luò)爬蟲相比,本發(fā)明的網(wǎng)絡(luò)爬蟲的內(nèi)核及Ajax抓取配置都集成有htmlunit,并且支持直接用腳本語言使用htmlunit的功能。這樣,該Ajax抓取配置在執(zhí)行方式上就需要一個模擬的瀏覽器加載該網(wǎng)頁的頁面并且執(zhí)行該網(wǎng)頁需要執(zhí)行的JavaScript腳本(其中包括異步請求),并且在加載完成之后,還支持通過該Ajax抓取配置來模擬用戶操作,例如點擊按鈕、提交表單等,然后再根據(jù)元素路徑提取該網(wǎng)頁的頁面中的元素所需要的值,例如內(nèi)容、鏈接、圖像識別結(jié)果等。
[0007]這樣,通過XmlHttpRequest對象(Ajax的網(wǎng)頁應(yīng)用程序架構(gòu)的一項關(guān)鍵功能,能夠提供在不重新加載頁面的情況下更新網(wǎng)頁的功能)向服務(wù)器發(fā)送異步請求,從服務(wù)器獲取數(shù)據(jù),然后用JavaScript來操作DOM (文檔對象模型)而更新頁面,而JavaScript則可以及時向服務(wù)器提出異步請求和處理響應(yīng),而不會阻塞用戶。
[0008]通過上述方式就能夠以Ajax形式來抓取網(wǎng)頁中的數(shù)據(jù),這些數(shù)據(jù)主要是指商品信息,包括商品名稱、價格、圖片、庫存狀態(tài)、用戶評論等內(nèi)容。
[0009]較佳地,該Ajax抓取配置的root (根)節(jié)點下設(shè)置有Ajax節(jié)點,該內(nèi)核還用于在讀取該Ajax節(jié)點的內(nèi)容后加載該網(wǎng)頁的頁面并執(zhí)行包含有異步請求的JavaScript腳本以抓取該待抓取的數(shù)據(jù)。[0010]較佳地,該Ajax節(jié)點包括操作類元素和提取類元素,該操作類元素用于模擬用戶的操作,該提取類元素用于指定該待抓取的數(shù)據(jù)。
[0011]其中,網(wǎng)絡(luò)爬蟲的實現(xiàn)都是基于一種樹形結(jié)構(gòu)的數(shù)據(jù),該樹形結(jié)構(gòu)中的每一個節(jié)點都可以被當(dāng)作是一棵子樹的根節(jié)點,即root節(jié)點。而在傳統(tǒng)的網(wǎng)絡(luò)爬蟲的抓取配置中,定義了兩種方式進行數(shù)據(jù)的爬取,第一種是純腳本的爬取方式,即如果在抓取配置的root節(jié)點下存在一個Custom節(jié)點(一種節(jié)點的名稱)的話,網(wǎng)絡(luò)爬蟲將直接執(zhí)行該Custom節(jié)點中的腳本內(nèi)容,若該root節(jié)點下存在一個Getting節(jié)點(一種節(jié)點的名稱),網(wǎng)絡(luò)爬蟲則按照抓取配置中的定義對該Getting節(jié)點進行解析執(zhí)行。
[0012]而在本發(fā)明中,該root節(jié)點下還設(shè)置有Ajax節(jié)點,該內(nèi)核在讀取到該Ajax節(jié)點后就會以上述的Ajax抓取配置的執(zhí)行方式來抓取該網(wǎng)頁中的數(shù)據(jù)。其中的Ajax的初始化鏈接仍然由傳輸?shù)膮?shù)url (網(wǎng)頁地址)來決定,即調(diào)用htmlunit提供的接口加載文檔以及Ajax請求的數(shù)據(jù),知道服務(wù)器返回結(jié)束請求的標(biāo)識。
[0013]而該Ajax節(jié)點具體包括操作類元素和提取類元素,這兩類元素可以交叉存在,沒有先后順序,可以按照實際情況安排操作和提取的順序。操作類元素包含用戶常用的操作,例如點擊按鈕、提交表單等操作,而在操作某個元素之前,首先要定位這個元素,而定位元素的方法有兩種,一種是通過Xpath (—種在XML (可擴展標(biāo)記語言)文檔中查找信息的語言),另一種是通過CSS (級聯(lián)樣式表)的Selector (選擇符)屬性,而這兩種只需出現(xiàn)其中一種即可,并且上述的定位元素的方法都屬于本領(lǐng)域的公知技術(shù),在此就不再贅述。
[0014]較佳地,該網(wǎng)絡(luò)爬蟲還包括一安裝包,該安裝包用于負(fù)責(zé)該網(wǎng)絡(luò)爬蟲的更新和啟動。
[0015]本發(fā)明的積極進步效果在于:本發(fā)明能夠支持Ajax的執(zhí)行方式抓取網(wǎng)頁頁面的數(shù)據(jù),并且支持異步請求的技術(shù),可以使用JavaScript向服務(wù)器提出請求并處理響應(yīng),而且不會阻塞用戶。
【專利附圖】

【附圖說明】
[0016]圖1為本發(fā)明的一較佳實施例的網(wǎng)絡(luò)爬蟲的結(jié)構(gòu)圖。
【具體實施方式】
[0017]下面結(jié)合附圖給出本發(fā)明較佳實施例,以詳細(xì)說明本發(fā)明的技術(shù)方案。
[0018]如圖1所示,本發(fā)明的網(wǎng)絡(luò)爬蟲包括一安裝包1、一內(nèi)核2以及一 Ajax抓取配置3。
[0019]該安裝包I負(fù)責(zé)該網(wǎng)絡(luò)爬蟲的更新和啟動,以及連接任務(wù)服務(wù)器的工作,該內(nèi)核2以及該Ajax抓取配置3均集成有htmlunit,該Ajax抓取配置3能夠指定一網(wǎng)頁的地址以及該網(wǎng)頁中的待抓取的數(shù)據(jù),該內(nèi)核2則能夠驅(qū)動搜索引擎,并基于該Ajax抓取配置3提取該待抓取的數(shù)據(jù)。
[0020]與傳統(tǒng)的網(wǎng)絡(luò)爬蟲相比,本發(fā)明的網(wǎng)絡(luò)爬蟲的內(nèi)核2及Ajax抓取配置3都集成有htmlunit,并且支持直接用腳本語言使用htmlunit的功能。這樣,該Ajax抓取配置3在執(zhí)行方式上就需要一個模擬的瀏覽器加載該網(wǎng)頁的頁面并且執(zhí)行該網(wǎng)頁需要執(zhí)行的JavaScript腳本(其中包括異步請求),并且在加載完成之后,還支持通過該Ajax抓取配置3來模擬用戶操作,例如點擊按鈕、提交表單等,然后再根據(jù)元素路徑提取該網(wǎng)頁的頁面中的元素所需要的值,例如內(nèi)容、鏈接、圖像識別結(jié)果等。
[0021]這樣,通過XmlHttpRequest對象向服務(wù)器發(fā)送異步請求,從服務(wù)器獲取數(shù)據(jù),然后用JavaScript來操作DOM而更新頁面,而JavaScript則可以及時向服務(wù)器提出異步請求和處理響應(yīng),而不會阻塞用戶。
[0022]通過上述方式就能夠以Ajax形式來抓取網(wǎng)頁中的數(shù)據(jù),這些數(shù)據(jù)主要是指商品信息,包括商品名稱、價格、圖片、庫存狀態(tài)、用戶評論等內(nèi)容。
[0023]該Ajax抓取配置3的root節(jié)點下設(shè)置有Ajax節(jié)點,該內(nèi)核2還在讀取該Ajax節(jié)點的內(nèi)容后加載該網(wǎng)頁的頁面并執(zhí)行包含有異步請求的JavaScript腳本以抓取該待抓取的數(shù)據(jù)。
[0024]其中,網(wǎng)絡(luò)爬蟲的實現(xiàn)都是基于一種樹形結(jié)構(gòu)的數(shù)據(jù),該樹形結(jié)構(gòu)中的每一個節(jié)點都可以被當(dāng)作是一棵子樹的根節(jié)點,即root節(jié)點。而在傳統(tǒng)的網(wǎng)絡(luò)爬蟲的抓取配置中,定義了兩種方式進行數(shù)據(jù)的爬取,第一種是純腳本的爬取方式,即如果在抓取配置的root節(jié)點下存在一個Custom節(jié)點的話,網(wǎng)絡(luò)爬蟲將直接執(zhí)行該Custom節(jié)點中的腳本內(nèi)容,若該root節(jié)點下存在一個Getting節(jié)點,網(wǎng)絡(luò)爬蟲則按照抓取配置中的定義對該Getting節(jié)點進行解析執(zhí)行。
[0025]而在本發(fā)明中,該root節(jié)點下還設(shè)置有Ajax節(jié)點,該內(nèi)核2在讀取到該Ajax節(jié)點后就會以上述的Ajax抓取配置3的執(zhí)行方式來抓取該網(wǎng)頁中的數(shù)據(jù)。其中的Ajax的初始化鏈接仍然由傳輸?shù)膮?shù)url來決定,即調(diào)用htmlunit提供的接口加載文檔以及Ajax請求的數(shù)據(jù),知道服務(wù)器返回結(jié)束請求的標(biāo)識。
[0026]而該Ajax節(jié)點具體包括操作類元素和提取類元素,這兩類元素可以交叉存在,沒有先后順序,可以按照實際情況安排操作和提取的順序。操作類元素包含用戶常用的操作,例如點擊按鈕、提交表單等操作,而在操作某個元素之前,首先要定位這個元素,而定位元素的方法有兩種,一種是通過Xpath,另一種是通過CSS的Selector屬性,而這兩種只需出現(xiàn)其中一種即可,并且上述的定位元素的方法都屬于本領(lǐng)域的公知技術(shù),在此就不再贅述。
[0027]其中,操作類元素包含常用的操作,例如點擊按鈕、提交表單等等。在操作某個元素之前,首先要定位這個元素,而定位這個元素的方法有兩種,一種是通過XPath,一種是通過CSS的Selector,分別對應(yīng)于任意一個操作類元素的節(jié)點的path(路徑)屬性和selector屬性,兩者只需要出項一種即可,其中包括了以下的子元素:
[0028]單擊元素:click,觸發(fā)一個單擊的事件,例如:〈click path=〃/div/a〃/>
[0029]雙擊元素:dbclick,觸發(fā)一個雙擊的事件,例如:〈dbclickselector=〃#abc〃/>
[0030]右擊元素:rclick,觸發(fā)鼠標(biāo)右鍵點擊的事件,例如:〈rclickselector=〃#abc〃/>
[0031]鼠標(biāo)移動:mouseMove,觸發(fā)鼠標(biāo)移動的事件,例如:<mouseMoveselector=〃#abc〃/>
[0032]鼠標(biāo)進入:move0ver,觸發(fā)鼠標(biāo)進入的事件,例如:〈mouseOverselector=〃#abc〃/>
[0033]鼠標(biāo)移出:move0ut,觸發(fā)鼠標(biāo)移出的事件,例如:〈mouseOutselector=〃#abc〃/>
[0034]輸入:type,模擬鍵盤輸入,例如填寫表單:〈typeselector=〃#abc〃value=〃something〃/>
[0035]觸發(fā)其它事件:fireEvent,觸發(fā)元素的其它事件,包括:submit, reset, change,load, unload, focus, blur, keydown, keypress, input,keyup,beforeunload,propertychange, readystatechange, DOMContentLoaded (上述的觸發(fā)兀素的事件都是本領(lǐng)域的技術(shù)人員根據(jù)需要能夠自定義的,如reset表示重置,input表示輸入等,本領(lǐng)域技術(shù)人員也都能夠理解各個觸發(fā)元素的事件所執(zhí)行的操作)等,例如:〈fireEventselector=〃#abc〃type=〃submit〃/>
[0036]其它操作類型:其它不常見操作類型還可以根據(jù)實際情況來擴展,為了使得配置支持所有的操作類型,我們通過定義action節(jié)點來支持其它操作,例如:
[0037]〈action selector=//#abc//do=//element.click() ; V〉其中的屬性 do 是基于獲取到的頁面元素的一系列操作(用JavaScript腳本進行方法調(diào)用)。
[0038]而提取類元素針對一個元素,我們定義多種需要提取的值,例如:[0039]〈extract selector=//#abc//elementIndex=//l//type=//text//name=//text/V>
[0040]可以提取ID (身份標(biāo)識號碼)為abc的元素所包含的文本內(nèi)容,elementlndex表示取第幾個元素,type的取值可以是:text, html, attribute,分別表示提取元素的包含內(nèi)容、HTML (超文本標(biāo)記語言)源代碼和某個屬性,如果是提取某個屬性,則應(yīng)說明要提取的屬性的名稱,例如:
[0041]〈extract selector=〃#abc〃type=〃attribute〃name=〃url〃attribute=〃href〃 />
[0042]特別的,如果元素是一個img (圖片的格式)的話,type取值也可以為OCR (光學(xué)字符識別),爬蟲將識別圖片內(nèi)容并返回識別結(jié)果。
[0043]在通過上述方法進行提取內(nèi)容之后,還可以使用簡單的方法對數(shù)據(jù)進行后處理,
例如:
[0044]
【權(quán)利要求】
1.一種網(wǎng)絡(luò)爬蟲,其特征在于,其包括一內(nèi)核以及一 Ajax抓取配置,該內(nèi)核以及該Ajax抓取配置均集成有htmlunit,該Ajax抓取配置用于指定一網(wǎng)頁的地址以及該網(wǎng)頁中的待抓取的數(shù)據(jù),該內(nèi)核用于驅(qū)動搜索引擎,并基于該Ajax抓取配置提取該待抓取的數(shù)據(jù)。
2.如權(quán)利要求1所述的網(wǎng)絡(luò)爬蟲,其特征在于,該Ajax抓取配置的root節(jié)點下設(shè)置有Ajax節(jié)點,該內(nèi)核還用于在讀取該Ajax節(jié)點的內(nèi)容后加載該網(wǎng)頁的頁面并執(zhí)行包含有異步請求的JavaScript腳本以抓取該待抓取的數(shù)據(jù)。
3.如權(quán)利要求2所述的網(wǎng)絡(luò)爬蟲,其特征在于,該Ajax節(jié)點包括操作類元素和提取類元素,該操作類元素用于模擬用戶的操作,該提取類元素用于指定該待抓取的數(shù)據(jù)。
4.如權(quán)利要求1-3中任意一項所述的網(wǎng)絡(luò)爬蟲,其特征在于,該網(wǎng)絡(luò)爬蟲還包括一安裝包,該安裝包用于負(fù)責(zé)該網(wǎng)絡(luò)爬蟲的更新和啟動。
【文檔編號】G06F17/30GK103853717SQ201210495699
【公開日】2014年6月11日 申請日期:2012年11月28日 優(yōu)先權(quán)日:2012年11月28日
【發(fā)明者】劉濤 申請人:紐海信息技術(shù)(上海)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
德庆县| 上饶县| 新龙县| 随州市| 隆昌县| 建瓯市| 朔州市| 寻乌县| 石屏县| 池州市| 贵州省| 平乡县| 习水县| 大新县| 疏勒县| 寿阳县| 同仁县| 广灵县| 新乡县| 富民县| 白玉县| 余江县| 苍南县| 古丈县| 岳阳县| 岢岚县| 湟中县| 汾阳市| 夹江县| 丽水市| 鄂托克前旗| 渝中区| 建始县| 阿图什市| 宁国市| 祁阳县| 铜陵市| 青河县| 保康县| 外汇| 孝义市|