本發(fā)明涉及網(wǎng)絡(luò)安全技術(shù)領(lǐng)域,特別涉及一種識(shí)別網(wǎng)絡(luò)爬蟲的方法及系統(tǒng)。
背景技術(shù):
互聯(lián)網(wǎng)的廣泛普及,使得在線web應(yīng)用平臺(tái)已成為互聯(lián)網(wǎng)信息交互的中心,各種商業(yè)交易均可以在web應(yīng)用平臺(tái)上完成,隨之而來的是在線web應(yīng)用平臺(tái)面臨的越來越多的安全威脅。其中,黑客們使用各種各樣掃描工具掃描web程序,進(jìn)行一些非法的網(wǎng)絡(luò)行為,并依此來獲取相關(guān)利益。不管是對(duì)web應(yīng)用平臺(tái)進(jìn)行漏洞掃描,還是針對(duì)商品頁面進(jìn)行刷單搶單等薅羊毛行為,首先進(jìn)行的都是頁面的爬蟲活動(dòng),進(jìn)而從返回的頁面里提取相關(guān)信息。復(fù)雜的網(wǎng)絡(luò)請(qǐng)求中,存在各式各樣頁面信息爬取,不正規(guī)的、惡意的程序過量爬取會(huì)造成服務(wù)器負(fù)載過大。
目前,識(shí)別網(wǎng)絡(luò)爬蟲主要有以下三種方法:(1)統(tǒng)計(jì)方法,通過對(duì)訪問記錄進(jìn)行統(tǒng)計(jì),根據(jù)事件類型、訪問頻率等進(jìn)行分析;(2)用戶代理(useragent,簡(jiǎn)稱為ua)分析方法,分析ua是否帶有明顯的爬蟲程序的信息;(3)陷阱方法,通過設(shè)置一種瀏覽器渲染不可見的隱藏鏈接,等待爬蟲觸發(fā)。
上述方法中均存在一些不足,具體如下:
(1)統(tǒng)計(jì)方法跟產(chǎn)品自身相關(guān)性較大,需根據(jù)產(chǎn)品特征來定義。判斷的準(zhǔn)則具有不確定性,無法根據(jù)一個(gè)定性的條件來判斷。在某些頁面存在線上活動(dòng)時(shí),就會(huì)導(dǎo)致局部頁面請(qǐng)求的頻率出現(xiàn)異常,從而出現(xiàn)爬蟲特征。而有些公司、學(xué)校統(tǒng)一網(wǎng)絡(luò)出口的地址其頁面訪問信息的統(tǒng)計(jì)結(jié)果也符合爬蟲特征。
(2)ua分析方法,ua信息容易被偽造,造成遺漏。ua信息是由超文本傳輸協(xié)議(hypertexttransferprotocol,簡(jiǎn)稱為http)請(qǐng)求發(fā)起方主動(dòng)攜帶的標(biāo)記當(dāng)前請(qǐng)求環(huán)境的一個(gè)信息字段,這個(gè)信息可由發(fā)起方進(jìn)行修改。如常用的各種瀏覽器均會(huì)在ua帶上自己瀏覽器信息的特殊字符,包括谷歌、百度等搜索引擎爬蟲的ua均帶有特殊標(biāo)記的字符,而一些惡意爬蟲程序利用這個(gè)特征偽造ua信息字段,使之和正規(guī)的搜索引擎爬蟲的ua或者正常瀏覽器的ua字段信息一樣,這樣就導(dǎo)致無法對(duì)這一類惡意爬蟲程序進(jìn)行有效的識(shí)別。
(3)陷阱方法,對(duì)于一些指定頁面爬取的爬蟲請(qǐng)求無法識(shí)別,會(huì)存在一定的誤報(bào)。
技術(shù)實(shí)現(xiàn)要素:
為了解決現(xiàn)有技術(shù)中爬蟲程序偽造信息字段造成爬蟲識(shí)別結(jié)果判斷不準(zhǔn)確,以及現(xiàn)有爬蟲識(shí)別方法存在一定的延時(shí)判斷,無法及時(shí)對(duì)請(qǐng)求進(jìn)行識(shí)別判斷的問題,本發(fā)明實(shí)施例提供了一種識(shí)別網(wǎng)絡(luò)爬蟲的方法及系統(tǒng)。所述技術(shù)方案如下:
根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種識(shí)別網(wǎng)絡(luò)爬蟲的方法,包括:
接收客戶端發(fā)起的頁面請(qǐng)求;
判斷所述頁面請(qǐng)求是否是爬蟲識(shí)別程序的請(qǐng)求;
如果所述頁面請(qǐng)求是爬蟲識(shí)別程序的請(qǐng)求,根據(jù)所述爬蟲識(shí)別程序的請(qǐng)求數(shù)據(jù)判斷所述客戶端是否為正??蛻舳耍⑿薷臄?shù)據(jù)庫中的爬蟲判斷記錄;
如果所述頁面請(qǐng)求不是爬蟲識(shí)別程序的請(qǐng)求,在響應(yīng)內(nèi)容類型為超文本標(biāo)記語言(hypertextmarkuplanguage,簡(jiǎn)稱為html)或javascript(簡(jiǎn)稱為js,是一種腳本語言)的頁面添加爬蟲識(shí)別程序代碼,并發(fā)送給所述客戶端。
進(jìn)一步的,根據(jù)所述爬蟲識(shí)別程序的請(qǐng)求數(shù)據(jù)判斷所述客戶端是否為正??蛻舳?,并修改數(shù)據(jù)庫中的爬蟲判斷記錄,包括:
判斷所述頁面請(qǐng)求是否是獲取焦點(diǎn)請(qǐng)求;
如果是獲取焦點(diǎn)請(qǐng)求,則將所述客戶端的爬蟲判斷記錄中的緩沖時(shí)間修改為當(dāng)前時(shí)間;
如果不是獲取焦點(diǎn)請(qǐng)求,則判斷所述頁面請(qǐng)求是否是失去焦點(diǎn)請(qǐng)求、關(guān)閉頁面請(qǐng)求和用戶行為請(qǐng)求中的任一個(gè);
如果是失去焦點(diǎn)請(qǐng)求、關(guān)閉頁面請(qǐng)求和用戶行為請(qǐng)求中的任一個(gè),則確定所述客戶端為正??蛻舳?,并修改所述客戶端的爬蟲判斷記錄中的對(duì)應(yīng)字段;
如果不是失去焦點(diǎn)請(qǐng)求、關(guān)閉頁面請(qǐng)求和用戶行為請(qǐng)求中的任一個(gè),則判斷所述頁面請(qǐng)求是否是需要再下發(fā)爬蟲識(shí)別程序代碼的請(qǐng)求;
如果是需要再下發(fā)爬蟲識(shí)別程序代碼的請(qǐng)求,則修改所述客戶端的爬蟲判斷記錄中的對(duì)應(yīng)字段;
如果不是需要再下發(fā)爬蟲識(shí)別程序代碼的請(qǐng)求,則不做任何處理。
進(jìn)一步的,所述爬蟲判斷記錄包括以下字段:客戶端標(biāo)識(shí)、緩沖時(shí)間、更新時(shí)間、下發(fā)狀態(tài)和爬蟲標(biāo)識(shí)位;其中,所述緩沖時(shí)間表示所述爬蟲識(shí)別程序的請(qǐng)求的接收時(shí)間范圍的計(jì)算起點(diǎn);所述更新時(shí)間表示修改所述爬蟲標(biāo)識(shí)位的時(shí)間;所述下發(fā)狀態(tài)表示所述爬蟲識(shí)別程序代碼是否下發(fā)給客戶端,0表示默認(rèn)值,1表示已下發(fā),2表示再下發(fā);爬蟲標(biāo)識(shí)位包括:0表示默認(rèn)值,1表示正??蛻舳?,2表示爬蟲可疑客戶端。
進(jìn)一步的,確定所述客戶端為正??蛻舳耍⑿薷乃隹蛻舳说呐老x判斷記錄中的對(duì)應(yīng)字段,包括:將緩沖時(shí)間修改為0,更新時(shí)間修改為當(dāng)前時(shí)間,下發(fā)狀態(tài)修改為0,爬蟲標(biāo)識(shí)位修改為1;
如果是需要再下發(fā)爬蟲識(shí)別程序代碼的請(qǐng)求,則修改所述客戶端的爬蟲判斷記錄中的對(duì)應(yīng)字段,包括:將緩沖時(shí)間修改為0,更新時(shí)間修改為0,下發(fā)狀態(tài)修改為2。
進(jìn)一步的,在響應(yīng)內(nèi)容類型為html或javascript的頁面添加爬蟲識(shí)別程序代碼,并發(fā)送給所述客戶端,包括:
判斷所述頁面請(qǐng)求是否是html頁面且支持javascript;
如果不是html頁面和/或不支持javascript,則確定不需要下發(fā)所述爬蟲識(shí)別程序代碼,直接響應(yīng)所述頁面請(qǐng)求;
如果是html頁面且支持javascript,則確定需要下發(fā)所述爬蟲識(shí)別程序代碼。
進(jìn)一步的,在確定需要下發(fā)所述爬蟲識(shí)別程序代碼之后,所述方法還包括:
根據(jù)客戶端標(biāo)識(shí)判斷所述數(shù)據(jù)庫中是否存儲(chǔ)有所述客戶端的爬蟲判斷記錄;
如果否,則確定所述客戶端未做過爬蟲識(shí)別處理,在響應(yīng)中添加所述爬蟲識(shí)別程序代碼,發(fā)給所述客戶端,并在所述數(shù)據(jù)庫中添加所述客戶端的爬蟲判斷記錄;
如果是,則確定所述客戶端做過爬蟲識(shí)別處理,根據(jù)所述客戶端的爬蟲判斷記錄中的下發(fā)狀態(tài)判斷是否需要再下發(fā)所述爬蟲識(shí)別程序代碼;
如果下發(fā)狀態(tài)為2,則確定需要再下發(fā)所述爬蟲識(shí)別程序代碼,在響應(yīng)中添加所述爬蟲識(shí)別程序代碼,發(fā)給所述客戶端,并將所述客戶端的爬蟲判斷記錄中的緩沖時(shí)間修改為當(dāng)前時(shí)間,下發(fā)狀態(tài)修改為1;
如果下發(fā)狀態(tài)不為2,則確定不需要再下發(fā)所述爬蟲識(shí)別程序代碼,直接響應(yīng)所述頁面請(qǐng)求。
進(jìn)一步的,所述方法還包括:
判斷所述爬蟲判斷記錄中的緩沖時(shí)間與當(dāng)前時(shí)間的差值是否超出預(yù)設(shè)時(shí)間范圍;
如果超出所述預(yù)設(shè)時(shí)間范圍且未收到所述爬蟲識(shí)別程序的請(qǐng)求,則確定所述客戶端為爬蟲可疑客戶端,并將緩沖時(shí)間修改為0,更新時(shí)間修改為當(dāng)前時(shí)間,下發(fā)狀態(tài)修改為0,爬蟲標(biāo)識(shí)位修改為2;
如果未超出所述預(yù)設(shè)時(shí)間范圍,則根據(jù)爬蟲標(biāo)識(shí)位與更新時(shí)間確定所述客戶端的當(dāng)前情況以及所要執(zhí)行的操作。
進(jìn)一步的,根據(jù)爬蟲標(biāo)識(shí)位與更新時(shí)間確定所述客戶端的當(dāng)前情況以及所要執(zhí)行的操作,包括:
如果爬蟲標(biāo)識(shí)位為0,則確定處于判斷過程,不做任何處理;
如果爬蟲標(biāo)識(shí)位為1,則說明之前已判斷該客戶端為正??蛻舳耍藭r(shí)需判斷更新時(shí)間與當(dāng)前時(shí)間的差值是否超出預(yù)設(shè)的識(shí)別間隔時(shí)間;如果是,則刪除所述客戶端的爬蟲判斷記錄,等待下次接收頁面請(qǐng)求進(jìn)行重新識(shí)別;如果否,則不做任何處理;
如果爬蟲標(biāo)識(shí)位為2,則說明之前已判斷該客戶端為爬蟲可疑客戶端,此時(shí)需判斷更新時(shí)間與當(dāng)前時(shí)間的差值是否超出預(yù)設(shè)的爬蟲處理時(shí)間;如果是,則確定需再下發(fā)所述爬蟲識(shí)別程序代碼,將下發(fā)狀態(tài)修改為2,緩沖時(shí)間修改為當(dāng)前時(shí)間,更新時(shí)間修改為空,爬蟲標(biāo)識(shí)位修改為0;如果否,則不做任何處理。
根據(jù)本發(fā)明實(shí)施例的另一個(gè)方面,提供了一種識(shí)別網(wǎng)絡(luò)爬蟲的系統(tǒng),包括:
接收單元,用于接收客戶端發(fā)起的頁面請(qǐng)求;
第一判斷單元,用于判斷所述頁面請(qǐng)求是否是爬蟲識(shí)別程序的請(qǐng)求;
第一處理單元,用于在所述頁面請(qǐng)求是爬蟲識(shí)別程序的請(qǐng)求的情況下,根據(jù)所述爬蟲識(shí)別程序的請(qǐng)求數(shù)據(jù)判斷所述客戶端是否為正??蛻舳?,并修改數(shù)據(jù)庫中的爬蟲判斷記錄;
第二處理單元,用于在所述頁面請(qǐng)求不是爬蟲識(shí)別程序的請(qǐng)求的情況下,在響應(yīng)內(nèi)容類型為html或javascript的頁面添加爬蟲識(shí)別程序代碼,并發(fā)送給所述客戶端。
進(jìn)一步的,所述第一處理單元包括:
第一判斷模塊,用于判斷所述頁面請(qǐng)求是否是獲取焦點(diǎn)請(qǐng)求;
第一處理模塊,用于在所述頁面請(qǐng)求是獲取焦點(diǎn)請(qǐng)求的情況下,將所述客戶端的爬蟲判斷記錄中的緩沖時(shí)間修改為當(dāng)前時(shí)間;
第二判斷模塊,用于在所述頁面請(qǐng)求不是獲取焦點(diǎn)請(qǐng)求的情況下,判斷所述頁面請(qǐng)求是否是失去焦點(diǎn)請(qǐng)求、關(guān)閉頁面請(qǐng)求和用戶行為請(qǐng)求中的任一個(gè);
第二處理模塊,用于在所述頁面請(qǐng)求是失去焦點(diǎn)請(qǐng)求、關(guān)閉頁面請(qǐng)求和用戶行為請(qǐng)求中的任一個(gè)的情況下,確定所述客戶端為正常客戶端,并修改所述客戶端的爬蟲判斷記錄中的對(duì)應(yīng)字段;
第三判斷模塊,用于在所述頁面請(qǐng)求不是失去焦點(diǎn)請(qǐng)求、關(guān)閉頁面請(qǐng)求和用戶行為請(qǐng)求中的任一個(gè)的情況下,判斷所述頁面請(qǐng)求是否是需要再下發(fā)爬蟲識(shí)別程序代碼的請(qǐng)求;
第三處理模塊,用于在所述頁面請(qǐng)求是需要再下發(fā)爬蟲識(shí)別程序代碼的請(qǐng)求的情況下,修改所述客戶端的爬蟲判斷記錄中的對(duì)應(yīng)字段;以及在所述頁面請(qǐng)求不是需要再下發(fā)爬蟲識(shí)別程序代碼的請(qǐng)求的情況下,不做任何處理。
進(jìn)一步的,所述爬蟲判斷記錄包括以下字段:客戶端標(biāo)識(shí)、緩沖時(shí)間、更新時(shí)間、下發(fā)狀態(tài)和爬蟲標(biāo)識(shí)位;其中,所述緩沖時(shí)間表示所述爬蟲識(shí)別程序的請(qǐng)求的接收時(shí)間范圍的計(jì)算起點(diǎn);所述更新時(shí)間表示修改所述爬蟲標(biāo)識(shí)位的時(shí)間;所述下發(fā)狀態(tài)表示所述爬蟲識(shí)別程序代碼是否下發(fā)給客戶端,0表示默認(rèn)值,1表示已下發(fā),2表示再下發(fā);爬蟲標(biāo)識(shí)位包括:0表示默認(rèn)值,1表示正??蛻舳?,2表示爬蟲可疑客戶端。
進(jìn)一步的,所述第二處理模塊具體用于將緩沖時(shí)間修改為0,更新時(shí)間修改為當(dāng)前時(shí)間,下發(fā)狀態(tài)修改為0,爬蟲標(biāo)識(shí)位修改為1;
所述第三處理模塊具體用于將緩沖時(shí)間修改為0,更新時(shí)間修改為0,下發(fā)狀態(tài)修改為2。
進(jìn)一步的,所述第二處理單元包括:
第四判斷模塊,用于判斷所述頁面請(qǐng)求是否是html頁面且支持javascript;
第四處理模塊,用于在所述頁面請(qǐng)求不是html頁面和/或不支持javascript的情況下,確定不需要下發(fā)所述爬蟲識(shí)別程序代碼,直接響應(yīng)所述頁面請(qǐng)求;
確定模塊,用于在所述頁面請(qǐng)求是html頁面且支持javascript的情況下,確定需要下發(fā)所述爬蟲識(shí)別程序代碼。
進(jìn)一步的,所述第二處理單元還包括:
第五判斷模塊,用于在所述確定模塊確定需要下發(fā)所述爬蟲識(shí)別程序代碼之后,根據(jù)客戶端標(biāo)識(shí)判斷所述數(shù)據(jù)庫中是否存儲(chǔ)有所述客戶端的爬蟲判斷記錄;
第五處理模塊,用于在判斷結(jié)果為否的情況下,確定所述客戶端未做過爬蟲識(shí)別處理,在響應(yīng)中添加所述爬蟲識(shí)別程序代碼,發(fā)給所述客戶端,并在所述數(shù)據(jù)庫中添加所述客戶端的爬蟲判斷記錄;
第六判斷模塊,用于在判斷結(jié)果為是的情況下,確定所述客戶端做過爬蟲識(shí)別處理,根據(jù)所述客戶端的爬蟲判斷記錄中的下發(fā)狀態(tài)判斷是否需要再下發(fā)所述爬蟲識(shí)別程序代碼;
第六處理模塊,用于在下發(fā)狀態(tài)為2的情況下,確定需要再下發(fā)所述爬蟲識(shí)別程序代碼,在響應(yīng)中添加所述爬蟲識(shí)別程序代碼,發(fā)給所述客戶端,并將所述客戶端的爬蟲判斷記錄中的緩沖時(shí)間修改為當(dāng)前時(shí)間,下發(fā)狀態(tài)修改為1;
第七處理模塊,用于在下發(fā)狀態(tài)不為2的情況下,確定不需要再下發(fā)所述爬蟲識(shí)別程序代碼,直接響應(yīng)所述頁面請(qǐng)求。
進(jìn)一步的,所述系統(tǒng)還包括:
第二判斷單元,用于判斷所述爬蟲判斷記錄中的緩沖時(shí)間與當(dāng)前時(shí)間的差值是否超出預(yù)設(shè)時(shí)間范圍;
第三處理單元,用于在超出預(yù)設(shè)時(shí)間范圍且未收到所述爬蟲識(shí)別程序的請(qǐng)求的情況下,確定所述客戶端為爬蟲可疑客戶端,并將緩沖時(shí)間修改為0,更新時(shí)間修改為當(dāng)前時(shí)間,下發(fā)狀態(tài)修改為0,爬蟲標(biāo)識(shí)位修改為2;
第四處理單元,用于在未超出所述預(yù)設(shè)時(shí)間范圍的情況下,根據(jù)爬蟲標(biāo)識(shí)位與更新時(shí)間確定所述客戶端的當(dāng)前情況以及所要執(zhí)行的操作。
進(jìn)一步的,所述第四處理單元具體用于:
如果爬蟲標(biāo)識(shí)位為0,則確定處于判斷過程,不做任何處理;
如果爬蟲標(biāo)識(shí)位為1,則說明之前已判斷該客戶端為正??蛻舳?,此時(shí)需判斷更新時(shí)間與當(dāng)前時(shí)間的差值是否超出預(yù)設(shè)的識(shí)別間隔時(shí)間;如果是,則刪除所述客戶端的爬蟲判斷記錄,等待下次接收頁面請(qǐng)求進(jìn)行重新識(shí)別;如果否,則不做任何處理;
如果爬蟲標(biāo)識(shí)位為2,則說明之前已判斷該客戶端為爬蟲可疑客戶端,此時(shí)需判斷更新時(shí)間與當(dāng)前時(shí)間的差值是否超出預(yù)設(shè)的爬蟲處理時(shí)間;如果是,則確定需再下發(fā)所述爬蟲識(shí)別程序代碼,將下發(fā)狀態(tài)修改為2,緩沖時(shí)間修改為當(dāng)前時(shí)間,更新時(shí)間修改為空,爬蟲標(biāo)識(shí)位修改為0;如果否,則不做任何處理。
本發(fā)明實(shí)施例提供的技術(shù)方案帶來的有益效果是:將爬蟲識(shí)別程序代碼下發(fā)給客戶端,通過判斷接收的頁面請(qǐng)求是否是爬蟲識(shí)別程序的請(qǐng)求,然后進(jìn)行相應(yīng)的處理,根據(jù)請(qǐng)求數(shù)據(jù)和客戶端的爬蟲判斷記錄識(shí)別客戶端是否有爬蟲活動(dòng),能夠根據(jù)頁面請(qǐng)求及時(shí)進(jìn)行爬蟲識(shí)別判斷。同時(shí),對(duì)源服務(wù)器中的代碼結(jié)構(gòu)和業(yè)務(wù)邏輯無需做任何改變,識(shí)別過程與產(chǎn)品特征無關(guān),也與易于偽造的用戶代理信息字段無關(guān),提高了識(shí)別結(jié)果的準(zhǔn)確性。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例提供的識(shí)別網(wǎng)絡(luò)爬蟲的方法的流程圖;
圖2是本發(fā)明實(shí)施例提供的識(shí)別網(wǎng)絡(luò)爬蟲的方法中步驟s103的具體流程圖;
圖3是本發(fā)明實(shí)施例提供的識(shí)別網(wǎng)絡(luò)爬蟲的方法中步驟s104的具體的流程圖;
圖4是本發(fā)明具體實(shí)施例提供的識(shí)別網(wǎng)絡(luò)爬蟲方法的流程圖;
圖5是本發(fā)明具體實(shí)施例提供的時(shí)間處理流程圖;
圖6是本發(fā)明實(shí)施例提供的識(shí)別網(wǎng)絡(luò)爬蟲的系統(tǒng)的結(jié)構(gòu)框圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
本發(fā)明實(shí)施例提供了一種識(shí)別網(wǎng)絡(luò)爬蟲的方法,可以由服務(wù)器執(zhí)行。圖1是本發(fā)明實(shí)施例提供的識(shí)別網(wǎng)絡(luò)爬蟲的方法的流程圖,如圖1所示,該方法包括如下的步驟s101至步驟s104。
步驟s101,接收客戶端發(fā)起的頁面請(qǐng)求。
步驟s102,判斷頁面請(qǐng)求是否是爬蟲識(shí)別程序的請(qǐng)求。具體的,如果爬蟲識(shí)別程序代碼下發(fā)到客戶端,爬蟲識(shí)別程序可以利用一些請(qǐng)求進(jìn)行爬蟲識(shí)別,例如,該請(qǐng)求可以是敲擊鍵盤、點(diǎn)擊鼠標(biāo)等用戶行為請(qǐng)求,或者是關(guān)閉頁面請(qǐng)求等。
步驟s103,如果頁面請(qǐng)求是爬蟲識(shí)別程序的請(qǐng)求,根據(jù)爬蟲識(shí)別程序的請(qǐng)求數(shù)據(jù)判斷客戶端是否為正常客戶端,并修改數(shù)據(jù)庫中的爬蟲判斷記錄。其中,爬蟲判斷記錄是存儲(chǔ)在數(shù)據(jù)庫中的,用于輔助進(jìn)行爬蟲識(shí)別的信息。
步驟s104,如果頁面請(qǐng)求不是爬蟲識(shí)別程序的請(qǐng)求,在響應(yīng)內(nèi)容類型為html或javascript的頁面添加爬蟲識(shí)別程序代碼,并發(fā)送給客戶端。即通過響應(yīng)向客戶端下發(fā)爬蟲識(shí)別程序代碼。
上述識(shí)別網(wǎng)絡(luò)爬蟲的方法中,將爬蟲識(shí)別程序代碼下發(fā)給客戶端,通過判斷接收的頁面請(qǐng)求是否是爬蟲識(shí)別程序的請(qǐng)求,然后進(jìn)行相應(yīng)的處理,根據(jù)請(qǐng)求數(shù)據(jù)和爬蟲判斷記錄識(shí)別客戶端是否有爬蟲活動(dòng),后續(xù)根據(jù)客戶端情況實(shí)時(shí)修改該客戶端的爬蟲判斷記錄。該方法能夠根據(jù)頁面請(qǐng)求及時(shí)進(jìn)行爬蟲識(shí)別判斷,同時(shí),對(duì)源服務(wù)器中的代碼結(jié)構(gòu)和業(yè)務(wù)邏輯無需做任何改變,識(shí)別過程與產(chǎn)品特征無關(guān),也與易于偽造的用戶代理信息字段無關(guān),提高了識(shí)別結(jié)果的準(zhǔn)確性。
上述爬蟲判斷記錄包括以下字段:客戶端標(biāo)識(shí)(即客戶端id)、緩沖時(shí)間、更新時(shí)間、下發(fā)狀態(tài)和爬蟲標(biāo)識(shí)位。其中,客戶端標(biāo)識(shí)可以包括mac(mediaaccesscontrol,媒體訪問控制)地址、客戶端信息(如js、html、html5特性等的支持情況)、瀏覽器類型等。緩沖時(shí)間表示爬蟲識(shí)別程序的請(qǐng)求的接收時(shí)間范圍的計(jì)算起點(diǎn),在具體應(yīng)用中,可以計(jì)算緩沖時(shí)間與當(dāng)前時(shí)間的差值,若該差值超過預(yù)設(shè)的接收時(shí)間范圍,即預(yù)設(shè)的接收時(shí)間范圍內(nèi)未收到爬蟲識(shí)別程序的請(qǐng)求,可以確定客戶端為爬蟲可疑客戶端。更新時(shí)間表示修改爬蟲標(biāo)識(shí)位的時(shí)間。下發(fā)狀態(tài)表示爬蟲識(shí)別程序代碼是否下發(fā)給客戶端,0表示默認(rèn)值,1表示已下發(fā),2表示再下發(fā)。爬蟲標(biāo)識(shí)位的值可以為0、1或2,0表示默認(rèn)值,1表示正??蛻舳?,2表示爬蟲可疑客戶端。
初始的爬蟲判斷記錄中,緩沖時(shí)間為當(dāng)前時(shí)間戳,更新時(shí)間為空,下發(fā)狀態(tài)為1,爬蟲標(biāo)識(shí)位為0。
如圖2所示,步驟s103中根據(jù)爬蟲識(shí)別程序的請(qǐng)求數(shù)據(jù)判斷客戶端是否為正??蛻舳瞬⑿薷臄?shù)據(jù)庫中的爬蟲判斷記錄,可以包括以下步驟:
步驟s1031,判斷頁面請(qǐng)求是否是獲取焦點(diǎn)請(qǐng)求。其中,獲取焦點(diǎn)請(qǐng)求是指鼠標(biāo)點(diǎn)擊屏幕上某一位置,鼠標(biāo)所點(diǎn)位置為焦點(diǎn),則該位置或位置所屬頁面獲取了焦點(diǎn),點(diǎn)擊行為所產(chǎn)生的請(qǐng)求即為獲取焦點(diǎn)請(qǐng)求。
步驟s1032,如果是獲取焦點(diǎn)請(qǐng)求,則將該客戶端的爬蟲判斷記錄中的緩沖時(shí)間修改為當(dāng)前時(shí)間。此時(shí),并不能判斷出客戶端是否有爬蟲活動(dòng),對(duì)緩沖時(shí)間字段進(jìn)行修改,以便后續(xù)計(jì)算接收時(shí)間范圍內(nèi)是否接收到爬蟲識(shí)別程序的請(qǐng)求,從而可以識(shí)別客戶端是否有爬蟲活動(dòng)。
步驟s1033,如果不是獲取焦點(diǎn)請(qǐng)求,則判斷頁面請(qǐng)求是否是失去焦點(diǎn)請(qǐng)求、關(guān)閉頁面請(qǐng)求和用戶行為請(qǐng)求中的任一個(gè)。
舉例而言,用戶打開了某個(gè)頁面,然后點(diǎn)擊鼠標(biāo)右鍵彈出新窗口,那么該頁面就失去焦點(diǎn),該點(diǎn)擊右鍵的行為所產(chǎn)生的請(qǐng)求即為失去焦點(diǎn)請(qǐng)求。用戶行為請(qǐng)求包括用戶敲擊鍵盤、點(diǎn)擊鼠標(biāo)、滾輪、滑動(dòng)等用戶具體操作行為所產(chǎn)生的請(qǐng)求。在實(shí)際應(yīng)用中,點(diǎn)擊右鍵彈出窗口的位置是隨機(jī)的,不同的客戶端在不同的時(shí)間彈出窗口的位置不相同,這樣的隨機(jī)性可以確保不會(huì)造成重放攻擊。對(duì)于這種輕度影響用戶正常使用、瀏覽網(wǎng)頁的因素,用戶行為上往往有比較簡(jiǎn)單的下意識(shí)操作去進(jìn)行修正,例如,移動(dòng)鼠標(biāo)后點(diǎn)擊、鼠標(biāo)右鍵點(diǎn)擊空白處等,由此可以盡量避免爬蟲誤報(bào)。
步驟s1034,如果是失去焦點(diǎn)請(qǐng)求、關(guān)閉頁面請(qǐng)求和用戶行為請(qǐng)求中的任一個(gè),則確定客戶端為正??蛻舳耍⑿薷脑摽蛻舳说呐老x判斷記錄中的對(duì)應(yīng)字段。具體修改字段如下:將緩沖時(shí)間修改為0,更新時(shí)間修改為當(dāng)前時(shí)間,下發(fā)狀態(tài)修改為0,爬蟲標(biāo)識(shí)位修改為1。
本步驟中,確定為正??蛻舳藭r(shí),對(duì)更新時(shí)間字段進(jìn)行修改,以便后續(xù)根據(jù)該更新時(shí)間計(jì)算是否到了識(shí)別間隔時(shí)間,如果到了識(shí)別間隔時(shí)間,則需要重新對(duì)該客戶端進(jìn)行識(shí)別,以免發(fā)生漏報(bào)。具體的,如果頁面請(qǐng)求是用戶行為請(qǐng)求,對(duì)于隱藏鼠標(biāo)的方案,服務(wù)器需收到至少3個(gè)鼠標(biāo)位置,才能判斷為正??蛻舳耍瑥亩鴾p少漏報(bào)誤報(bào)的發(fā)生。
步驟s1035,如果不是失去焦點(diǎn)請(qǐng)求、關(guān)閉頁面請(qǐng)求和用戶行為請(qǐng)求中的任一個(gè),則判斷頁面請(qǐng)求是否是需要再下發(fā)爬蟲識(shí)別程序代碼的請(qǐng)求。
步驟s1036,如果是需要再下發(fā)爬蟲識(shí)別程序代碼的請(qǐng)求,則修改該客戶端的爬蟲判斷記錄中的對(duì)應(yīng)字段。具體修改字段如下:將緩沖時(shí)間修改為0,更新時(shí)間修改為0,下發(fā)狀態(tài)修改為2。將緩沖時(shí)間和更新時(shí)間歸零,便于下一輪識(shí)別過程中對(duì)其進(jìn)行賦值。
步驟s1037,如果不是需要再下發(fā)爬蟲識(shí)別程序代碼的請(qǐng)求,則不做任何處理。
通過圖2所示的流程,能夠根據(jù)爬蟲識(shí)別程序的請(qǐng)求數(shù)據(jù)判斷出客戶端是否有爬蟲活動(dòng),如果暫時(shí)未能判斷出結(jié)果,則等待下一輪再接收到頁面請(qǐng)求進(jìn)行識(shí)別。
如圖3所示,步驟s104包括以下步驟:
步驟s1041,判斷頁面請(qǐng)求是否是html頁面且支持javascript,以判斷是否需要下發(fā)爬蟲識(shí)別程序代碼;
步驟s1042,如果不是html頁面和/或不支持javascript,則確定不需要下發(fā)爬蟲識(shí)別程序代碼,直接響應(yīng)頁面請(qǐng)求;
步驟s1043,如果是html頁面且支持javascript,則確定需要下發(fā)爬蟲識(shí)別程序代碼,并進(jìn)入步驟s1044;
步驟s1044,根據(jù)客戶端標(biāo)識(shí)判斷數(shù)據(jù)庫中是否存儲(chǔ)有該客戶端的爬蟲判斷記錄;
步驟s1045,如果否,則確定客戶端未做過爬蟲識(shí)別處理,在響應(yīng)中添加爬蟲識(shí)別程序代碼,發(fā)給客戶端,并在數(shù)據(jù)庫中添加該客戶端的爬蟲判斷記錄;
步驟s1046,如果是,則確定客戶端做過爬蟲識(shí)別處理,根據(jù)該客戶端的爬蟲判斷記錄中的下發(fā)狀態(tài)判斷是否需要再下發(fā)爬蟲識(shí)別程序代碼;
步驟s1047,如果下發(fā)狀態(tài)為2,則確定需要再下發(fā)爬蟲識(shí)別程序代碼,在響應(yīng)中添加爬蟲識(shí)別程序代碼,發(fā)給客戶端,并將該客戶端的爬蟲判斷記錄中的緩沖時(shí)間修改為當(dāng)前時(shí)間,下發(fā)狀態(tài)修改為1;
步驟s1048,如果下發(fā)狀態(tài)不為2,則確定不需要再下發(fā)爬蟲識(shí)別程序代碼,直接響應(yīng)頁面請(qǐng)求。
圖3所示的流程中,在頁面請(qǐng)求不是爬蟲識(shí)別程序的請(qǐng)求的情況下,根據(jù)頁面請(qǐng)求的特點(diǎn)以及數(shù)據(jù)庫中是否存在該客戶端的爬蟲判斷記錄,決定是否需要下發(fā)代碼給客戶端,以便及時(shí)識(shí)別爬蟲,避免對(duì)該客戶端的漏報(bào)。
在上述識(shí)別網(wǎng)絡(luò)爬蟲的過程中,還可以包括時(shí)間處理流程,例如,在多長時(shí)間內(nèi)未收到爬蟲識(shí)別程序的請(qǐng)求,則判定客戶端為爬蟲可疑客戶端;爬蟲可疑客戶端的爬蟲處理時(shí)間;對(duì)正??蛻舳诉M(jìn)行重新識(shí)別的間隔時(shí)間。時(shí)間處理流程可以是與識(shí)別過程并行進(jìn)行,根據(jù)數(shù)據(jù)庫中的爬蟲判斷記錄計(jì)算時(shí)間差值,與預(yù)設(shè)值進(jìn)行對(duì)比,并進(jìn)行相應(yīng)處理。時(shí)間處理流程可以在接收到客戶端發(fā)起的時(shí)間處理請(qǐng)求后啟動(dòng),也可以由服務(wù)器自身決定何時(shí)啟動(dòng),例如,間隔一段時(shí)間對(duì)所有客戶端或部分客戶端啟動(dòng)時(shí)間處理流程。
具體的,上述識(shí)別網(wǎng)絡(luò)爬蟲的方法還可以包括以下時(shí)間處理步驟:判斷爬蟲判斷記錄中的緩沖時(shí)間與當(dāng)前時(shí)間的差值是否超出預(yù)設(shè)時(shí)間范圍;如果超出預(yù)設(shè)時(shí)間范圍,且未收到爬蟲識(shí)別程序的請(qǐng)求,則確定客戶端為爬蟲可疑客戶端,并將緩沖時(shí)間修改為0,更新時(shí)間修改為當(dāng)前時(shí)間,下發(fā)狀態(tài)修改為0,爬蟲標(biāo)識(shí)位修改為2;如果未超出預(yù)設(shè)時(shí)間范圍,則根據(jù)爬蟲標(biāo)識(shí)位與更新時(shí)間確定客戶端的當(dāng)前情況以及所要執(zhí)行的操作。
上述時(shí)間處理步驟中,確定為爬蟲可疑客戶端時(shí),對(duì)更新時(shí)間字段進(jìn)行修改,以便后續(xù)根據(jù)該更新時(shí)間計(jì)算是否到了爬蟲處理時(shí)間,如果到了爬蟲處理時(shí)間,則需要重新對(duì)該客戶端進(jìn)行識(shí)別,以免發(fā)生誤報(bào)。上述預(yù)設(shè)時(shí)間范圍可以根據(jù)實(shí)際需求自行設(shè)定,例如,可以配置為1分鐘,從緩沖時(shí)間起算,超過1分鐘未收到爬蟲識(shí)別程序的請(qǐng)求,則確定客戶端為爬蟲可疑客戶端。
其中,根據(jù)爬蟲標(biāo)識(shí)位與更新時(shí)間確定客戶端的當(dāng)前情況以及所要執(zhí)行的操作,包括:
(1)如果爬蟲標(biāo)識(shí)位為0,則確定處于判斷過程,暫時(shí)不做任何處理。
(2)如果爬蟲標(biāo)識(shí)位為1,則說明之前已判斷該客戶端為正常客戶端,此時(shí)需判斷更新時(shí)間與當(dāng)前時(shí)間的差值是否超出預(yù)設(shè)的識(shí)別間隔時(shí)間;如果是,則刪除該客戶端的爬蟲判斷記錄,等待下次接收頁面請(qǐng)求進(jìn)行重新識(shí)別;如果否,則不做任何處理。
(3)如果爬蟲標(biāo)識(shí)位為2,則說明之前已判斷該客戶端為爬蟲可疑客戶端,此時(shí)需判斷更新時(shí)間與當(dāng)前時(shí)間的差值是否超出預(yù)設(shè)的爬蟲處理時(shí)間;如果是,則確定需再下發(fā)爬蟲識(shí)別程序代碼,將下發(fā)狀態(tài)修改為2,緩沖時(shí)間修改為當(dāng)前時(shí)間,更新時(shí)間修改為空,爬蟲標(biāo)識(shí)位修改為0;如果否,則不做任何處理。本步驟中,過了爬蟲處理時(shí)間,對(duì)緩沖時(shí)間字段進(jìn)行修改,以便后續(xù)計(jì)算接收時(shí)間范圍內(nèi)是否接受到爬蟲識(shí)別程序的請(qǐng)求,從而可以及時(shí)識(shí)別客戶端是否有爬蟲活動(dòng)。
對(duì)于正??蛻舳?,在經(jīng)過一段時(shí)間后需要重新進(jìn)行爬蟲識(shí)別,這段時(shí)間即為識(shí)別間隔時(shí)間,可以根據(jù)實(shí)際需求自行設(shè)定,例如24小時(shí)。對(duì)于爬蟲可疑客戶端,在對(duì)其進(jìn)行一段時(shí)間的處理(例如,攔截)后,需要重新下發(fā)代碼,這段時(shí)間即為爬蟲處理時(shí)間,可以根據(jù)實(shí)際需求自行設(shè)定,例如10分鐘。
通過上述時(shí)間處理流程,對(duì)確定為正??蛻舳嘶蛘吲老x可疑客戶端的客戶端,在間隔一定時(shí)間后,重新進(jìn)行爬蟲識(shí)別,從而能夠及時(shí)發(fā)現(xiàn)爬蟲活動(dòng),避免漏報(bào)情況發(fā)生。
下面結(jié)合圖4和圖5的具體實(shí)施例對(duì)上述識(shí)別網(wǎng)絡(luò)爬蟲的方法進(jìn)行詳細(xì)說明。以下具體實(shí)施例僅作示例,在實(shí)際應(yīng)用中,在能夠?qū)崿F(xiàn)方案的基礎(chǔ)上可以對(duì)其步驟的執(zhí)行順序或?qū)崿F(xiàn)方式稍作改變。
圖4是本發(fā)明具體實(shí)施例提供的識(shí)別網(wǎng)絡(luò)爬蟲方法的流程圖,包括以下步驟:
步驟s4001,接收頁面請(qǐng)求。
步驟s4002,判斷頁面請(qǐng)求是否是爬蟲識(shí)別程序的請(qǐng)求。如果不是,則進(jìn)入步驟s4003;如果是,則進(jìn)入步驟s4010。
步驟s4003,判斷頁面請(qǐng)求是否是html頁面且支持js(javascript,java腳本),本步驟是為了判斷是否需要下發(fā)代碼。如果不是html頁面和/或者不支持js,說明不能解析js的請(qǐng)求,則進(jìn)入步驟s4004;如果是html頁面且支持js,則進(jìn)入步驟s4005。
步驟s4004,直接響應(yīng)。
步驟s4005,判斷數(shù)據(jù)庫中是否存在此客戶端的爬蟲判斷記錄,本步驟是為了判斷此客戶端是否有做過爬蟲識(shí)別的處理。如果存在,則進(jìn)入步驟s4007;如果不存在,則進(jìn)入步驟s4006。
步驟s4006,在響應(yīng)中加入爬蟲識(shí)別程序代碼,并在數(shù)據(jù)庫中插入一條記錄。
初始化記錄的各字段值如下:
客戶端id:當(dāng)前的客戶端id;
緩沖時(shí)間:當(dāng)前時(shí)間戳;
更新時(shí)間:空;
下發(fā)狀態(tài):1,表示已下發(fā);
爬蟲標(biāo)識(shí)位:0,表示默認(rèn)值。
步驟s4007,判斷下發(fā)狀態(tài)字段是否為2,本步驟是為了判斷是否需要再下發(fā)代碼。如果是,則需要再下發(fā)代碼,進(jìn)入步驟s4008;如果不是,則無需再下發(fā)代碼,進(jìn)入步驟s4009。
步驟s4008,在響應(yīng)中加入爬蟲識(shí)別程序代碼,發(fā)給客戶端,并修改數(shù)據(jù)庫中記錄的字段。
客戶端id:當(dāng)前的客戶端id;
緩沖時(shí)間:當(dāng)前時(shí)間戳;
更新時(shí)間:空;
下發(fā)狀態(tài):1,表示已下發(fā);
爬蟲標(biāo)識(shí)位:0,表示默認(rèn)值。
步驟s4009,直接響應(yīng)。
步驟s4010,判斷頁面請(qǐng)求是否是獲取焦點(diǎn)請(qǐng)求,本步驟是為了判斷接收到的頁面請(qǐng)求的類型。如果是,則進(jìn)入步驟s4011;如果不是,則進(jìn)入步驟s4012。
步驟s4011,將緩沖時(shí)間修改為當(dāng)前時(shí)間。
客戶端id:當(dāng)前的客戶端id;
緩沖時(shí)間:當(dāng)前時(shí)間戳;
更新時(shí)間:空;
下發(fā)狀態(tài):1,表示已下發(fā);
爬蟲標(biāo)識(shí)位:0,表示默認(rèn)值。
步驟s4012,判斷頁面請(qǐng)求是否是失去焦點(diǎn)請(qǐng)求,本步驟是為了判斷接收到的頁面請(qǐng)求的類型。如果是,則進(jìn)入步驟s4013;如果不是,則進(jìn)入步驟s4014。
步驟s4013,判斷為正常的客戶端,修改數(shù)據(jù)庫中記錄的字段。
客戶端id:當(dāng)前的客戶端id;
緩沖時(shí)間:0;
更新時(shí)間:當(dāng)前時(shí)間;
下發(fā)狀態(tài):0,表示默認(rèn)值;
爬蟲標(biāo)識(shí)位:1,表示正常客戶端。
步驟s4014,判斷頁面請(qǐng)求是否是關(guān)閉頁面請(qǐng)求,本步驟是為了判斷接收到的請(qǐng)求的類型。如果是,則進(jìn)入步驟s4015;如果不是,則進(jìn)入步驟s4016。
步驟s4015,判斷為正常的客戶端,修改數(shù)據(jù)庫中記錄的字段。
客戶端id:當(dāng)前的客戶端id;
緩沖時(shí)間:0;
更新時(shí)間:當(dāng)前時(shí)間;
下發(fā)狀態(tài):0,表示默認(rèn)值;
爬蟲標(biāo)識(shí)位:1,表示正常客戶端。
步驟s4016,判斷頁面請(qǐng)求是否是用戶行為請(qǐng)求,本步驟是為了判斷接收到的請(qǐng)求的類型。如果是,則進(jìn)入步驟s4017;如果不是,則進(jìn)入步驟s4018。
步驟s4017,判斷為正常客戶端,修改數(shù)據(jù)庫中記錄的字段。
客戶端id:當(dāng)前的客戶端id;
緩沖時(shí)間:0;
更新時(shí)間:當(dāng)前時(shí)間;
下發(fā)狀態(tài):0,表示默認(rèn)值;
爬蟲標(biāo)識(shí)位:1,表示正??蛻舳恕?/p>
步驟s4018,判斷頁面請(qǐng)求是否是需要再下發(fā)的請(qǐng)求。如果是,則進(jìn)入步驟s4019;如果不是,則進(jìn)入步驟s4020。
步驟s4019,修改下發(fā)狀態(tài)為2。
客戶端id:當(dāng)前的客戶端id;
緩沖時(shí)間:0;
更新時(shí)間:0;
下發(fā)狀態(tài):2,表示再下發(fā);
爬蟲標(biāo)識(shí)位:0,表示默認(rèn)值。
步驟s4020,不做任何處理。
圖5是本發(fā)明具體實(shí)施例提供的時(shí)間處理流程圖,包括以下步驟:
步驟s5001,接收客戶端發(fā)起的時(shí)間判斷請(qǐng)求。
步驟s5002,判斷緩沖時(shí)間字段的時(shí)間戳與當(dāng)前時(shí)間的差值是否超過預(yù)設(shè)時(shí)間范圍1分鐘。如果超過,進(jìn)入步驟s5003;如果不超過,進(jìn)入步驟s5004
步驟s5003,判斷此客戶端為爬蟲可疑客戶端,爬蟲標(biāo)識(shí)位改為2,更新時(shí)間更改為當(dāng)前時(shí)間,緩沖時(shí)間和下發(fā)狀態(tài)都改為0。
步驟s5004,判斷爬蟲標(biāo)識(shí)位是否為非零值。本步驟是為了判斷此客戶端目前的情況,其中0表示還處于判斷階段,1是正??蛻舳?,2是爬蟲客戶端。如果為0,進(jìn)入步驟s5005;如果為非零值,進(jìn)入步驟s5006。
步驟s5005,還處于判斷階段,等待客戶端的頁面請(qǐng)求,暫時(shí)不做任何處理。
步驟s5006,判斷爬蟲標(biāo)識(shí)位是否為1。本步驟仍是為了判斷此客戶端目前的情況。如果為1,進(jìn)入步驟s5010;如果為2,進(jìn)入步驟s5007。
步驟s5007,說明是已經(jīng)判斷為爬蟲可疑客戶端的客戶端,判斷當(dāng)前時(shí)間與更新時(shí)間的時(shí)間差是否大于爬蟲處理時(shí)間10分鐘。本步驟是為了判斷是否到了爬蟲處理時(shí)間,對(duì)于爬蟲可疑客戶端,可以做相應(yīng)的處理,比如攔截,爬蟲處理時(shí)間到達(dá)后重新判斷是否有爬蟲活動(dòng)。如果是,進(jìn)入步驟s5008,如果否,進(jìn)入步驟s5009。
步驟s5008,說明攔截時(shí)間到,需重新下發(fā)代碼,修改下發(fā)狀態(tài)為2,其他字段改為初始值。
步驟s5009,說明還在攔截時(shí)間內(nèi),可不做處理。
步驟s5010,說明是已經(jīng)判斷為正常的客戶端,判斷當(dāng)前時(shí)間與更新時(shí)間的時(shí)間差是否大于識(shí)別間隔時(shí)間24小時(shí),本步驟是為了判斷是否到了重新識(shí)別的時(shí)間,例如24小時(shí)后重新識(shí)別。如果是,進(jìn)入步驟s5011;如果否,進(jìn)入步驟s5012。
步驟s5011,刪除此條記錄,等待下次請(qǐng)求過來重新識(shí)別。
步驟s5012,還沒到重新識(shí)別的時(shí)間,可不做處理。
本發(fā)明實(shí)施例還提供了一種識(shí)別網(wǎng)絡(luò)爬蟲的系統(tǒng),用于實(shí)現(xiàn)上述識(shí)別網(wǎng)絡(luò)爬蟲的方法,其實(shí)施可以參考上述方法實(shí)施例。如圖6所示,該系統(tǒng)包括:接收單元61、第一判斷單元62、第一處理單元63和第二處理單元64。下面對(duì)其結(jié)構(gòu)進(jìn)行詳細(xì)說明。
接收單元61,用于接收客戶端發(fā)起的頁面請(qǐng)求。
第一判斷單元62,連接至接收單元61,用于判斷頁面請(qǐng)求是否是爬蟲識(shí)別程序的請(qǐng)求。
第一處理單元63,連接至第一判斷單元62,用于在頁面請(qǐng)求是爬蟲識(shí)別程序的請(qǐng)求的情況下,根據(jù)爬蟲識(shí)別程序的請(qǐng)求數(shù)據(jù)判斷客戶端是否為正??蛻舳?,并修改數(shù)據(jù)庫中的爬蟲判斷記錄。爬蟲判斷記錄包括的字段參考方法實(shí)施例中所述,此處不再贅述。
第二處理單元64,連接至第一判斷單元62,用于在頁面請(qǐng)求不是爬蟲識(shí)別程序的請(qǐng)求的情況下,在響應(yīng)內(nèi)容類型為html或javascript的頁面添加爬蟲識(shí)別程序代碼,并發(fā)送給客戶端。
上述識(shí)別網(wǎng)絡(luò)爬蟲的系統(tǒng)將爬蟲識(shí)別程序代碼下發(fā)給客戶端,通過判斷接收的頁面請(qǐng)求是否是爬蟲識(shí)別程序的請(qǐng)求,然后進(jìn)行相應(yīng)的處理,根據(jù)請(qǐng)求數(shù)據(jù)和爬蟲判斷記錄識(shí)別客戶端是否有爬蟲活動(dòng),后續(xù)根據(jù)客戶端情況實(shí)時(shí)修改該客戶端的爬蟲判斷記錄。該方法能夠根據(jù)頁面請(qǐng)求及時(shí)進(jìn)行爬蟲識(shí)別判斷,同時(shí),對(duì)源服務(wù)器中的代碼結(jié)構(gòu)和業(yè)務(wù)邏輯無需做任何改變,識(shí)別過程與產(chǎn)品特征無關(guān),也與易于偽造的用戶代理信息字段無關(guān),提高了識(shí)別結(jié)果的準(zhǔn)確性。
優(yōu)選的,第一處理單元63包括:第一判斷模塊、第一處理模塊、第二判斷模塊、第二處理模塊、第三判斷模塊和第三處理模塊。上述模塊用于判斷請(qǐng)求數(shù)據(jù)以及進(jìn)行相應(yīng)處理。
具體的,第一判斷模塊,用于判斷頁面請(qǐng)求是否是獲取焦點(diǎn)請(qǐng)求;第一處理模塊,連接至第一判斷模塊,用于在頁面請(qǐng)求是獲取焦點(diǎn)請(qǐng)求的情況下,將該客戶端的爬蟲判斷記錄中的緩沖時(shí)間修改為當(dāng)前時(shí)間;第二判斷模塊,連接至第一判斷模塊,用于在頁面請(qǐng)求不是獲取焦點(diǎn)請(qǐng)求的情況下,判斷頁面請(qǐng)求是否是失去焦點(diǎn)請(qǐng)求、關(guān)閉頁面請(qǐng)求和用戶行為請(qǐng)求中的任一個(gè);第二處理模塊,連接至第二判斷模塊,用于在頁面請(qǐng)求是失去焦點(diǎn)請(qǐng)求、關(guān)閉頁面請(qǐng)求和用戶行為請(qǐng)求中的任一個(gè)的情況下,確定客戶端為正??蛻舳耍⑿薷脑摽蛻舳说呐老x判斷記錄中的對(duì)應(yīng)字段;第三判斷模塊,連接至第二判斷模塊,用于在頁面請(qǐng)求不是失去焦點(diǎn)請(qǐng)求、關(guān)閉頁面請(qǐng)求和用戶行為請(qǐng)求中的任一個(gè)的情況下,判斷頁面請(qǐng)求是否是需要再下發(fā)爬蟲識(shí)別程序代碼的請(qǐng)求;第三處理模塊,連接至第三判斷模塊,用于在頁面請(qǐng)求是需要再下發(fā)爬蟲識(shí)別程序代碼的請(qǐng)求的情況下,修改該客戶端的爬蟲判斷記錄中的對(duì)應(yīng)字段;以及在頁面請(qǐng)求不是需要再下發(fā)爬蟲識(shí)別程序代碼的請(qǐng)求的情況下,不做任何處理。
其中,第二處理模塊具體用于將緩沖時(shí)間修改為0,更新時(shí)間修改為當(dāng)前時(shí)間,下發(fā)狀態(tài)修改為0,爬蟲標(biāo)識(shí)位修改為1。第三處理模塊具體用于將緩沖時(shí)間修改為0,更新時(shí)間修改為0,下發(fā)狀態(tài)修改為2。
優(yōu)選的,第二處理單元64包括:第四判斷模塊、第四處理模塊、確定模塊、第五判斷模塊、第五處理模塊、第六判斷模塊、第六處理模塊和第七處理模塊。
具體的,第四判斷模塊,用于判斷頁面請(qǐng)求是否是html頁面且支持javascript;第四處理模塊,連接至第四判斷模塊,用于在頁面請(qǐng)求不是html頁面和/或不支持javascript的情況下,確定不需要下發(fā)爬蟲識(shí)別程序代碼,直接響應(yīng)頁面請(qǐng)求;確定模塊,連接至第四判斷模塊,用于在頁面請(qǐng)求是html頁面且支持javascript的情況下,確定需要下發(fā)爬蟲識(shí)別程序代碼;第五判斷模塊,連接至確定模塊,用于在確定模塊確定需要下發(fā)爬蟲識(shí)別程序代碼之后,根據(jù)客戶端標(biāo)識(shí)判斷數(shù)據(jù)庫中是否存儲(chǔ)有該客戶端的爬蟲判斷記錄;第五處理模塊,連接至第五判斷模塊,用于在判斷結(jié)果為否的情況下,確定客戶端未做過爬蟲識(shí)別處理,在響應(yīng)中添加爬蟲識(shí)別程序代碼,發(fā)給客戶端,并在數(shù)據(jù)庫中添加該客戶端的爬蟲判斷記錄;第六判斷模塊,連接至第五判斷模塊,用于在判斷結(jié)果為是的情況下,確定客戶端做過爬蟲識(shí)別處理,根據(jù)該客戶端的爬蟲判斷記錄中的下發(fā)狀態(tài)判斷是否需要再下發(fā)爬蟲識(shí)別程序代碼;第六處理模塊,連接至第六判斷模塊,用于在下發(fā)狀態(tài)為2的情況下,確定需要再下發(fā)爬蟲識(shí)別程序代碼,在響應(yīng)中添加爬蟲識(shí)別程序代碼,發(fā)給客戶端,并將該客戶端的爬蟲判斷記錄中的緩沖時(shí)間修改為當(dāng)前時(shí)間,下發(fā)狀態(tài)修改為1;第七處理模塊,連接至第六判斷模塊,用于在下發(fā)狀態(tài)不為2的情況下,確定不需要再下發(fā)爬蟲識(shí)別程序代碼,直接響應(yīng)頁面請(qǐng)求。
上述系統(tǒng)還可以包括:第二判斷單元、第三處理單元和第四處理單元。
具體的,第二判斷單元,用于判斷爬蟲判斷記錄中的緩沖時(shí)間與當(dāng)前時(shí)間的差值是否超出預(yù)設(shè)時(shí)間范圍;第三處理單元,連接至第二判斷單元,用于在超出預(yù)設(shè)時(shí)間范圍且未收到爬蟲識(shí)別程序的請(qǐng)求的情況下,確定客戶端為爬蟲可疑客戶端,并將緩沖時(shí)間修改為0,更新時(shí)間修改為當(dāng)前時(shí)間,下發(fā)狀態(tài)修改為0,爬蟲標(biāo)識(shí)位修改為2;第四處理單元,連接至第二判斷單元,用于在未超出預(yù)設(shè)時(shí)間范圍的情況下,根據(jù)爬蟲標(biāo)識(shí)位與更新時(shí)間確定客戶端的當(dāng)前情況以及所要執(zhí)行的操作。
其中,第四處理單元具體用于:如果爬蟲標(biāo)識(shí)位為0,則確定處于判斷過程,不做任何處理;如果爬蟲標(biāo)識(shí)位為1,則說明之前已判斷該客戶端為正??蛻舳?,此時(shí)需判斷更新時(shí)間與當(dāng)前時(shí)間的差值是否超出預(yù)設(shè)的識(shí)別間隔時(shí)間;如果是,則刪除該客戶端的爬蟲判斷記錄,等待下次接收頁面請(qǐng)求進(jìn)行重新識(shí)別;如果否,則不做任何處理;如果爬蟲標(biāo)識(shí)位為2,則說明之前已判斷該客戶端為爬蟲可疑客戶端,此時(shí)需判斷更新時(shí)間與當(dāng)前時(shí)間的差值是否超出預(yù)設(shè)的爬蟲處理時(shí)間;如果是,則確定需再下發(fā)爬蟲識(shí)別程序代碼,將下發(fā)狀態(tài)修改為2,緩沖時(shí)間修改為當(dāng)前時(shí)間,更新時(shí)間修改為空,爬蟲標(biāo)識(shí)位修改為0;如果否,則不做任何處理。
以上所描述的系統(tǒng)實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性的勞動(dòng)的情況下,即可以理解并實(shí)施。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實(shí)施方式可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件?;谶@樣的理解,上述技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如rom/ram、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。