一種針對(duì)爬蟲(chóng)的數(shù)據(jù)處理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及大數(shù)據(jù)處理技術(shù)領(lǐng)域,具體是一種針對(duì)爬蟲(chóng)的數(shù)據(jù)處理方法。
【背景技術(shù)】
[0002]網(wǎng)絡(luò)爬蟲(chóng)是捜索引擎抓取系統(tǒng)的重要組成部分。爬蟲(chóng)的主要目的是將互聯(lián)網(wǎng)上的網(wǎng)頁(yè)下載到本地形成一個(gè)或聯(lián)網(wǎng)內(nèi)容的鏡像備份。通過(guò)分析apache日志發(fā)現(xiàn),某系統(tǒng)40%的帶寬和服務(wù)器資源都消耗在爬蟲(chóng)上,如果除去10%_15%搜索引擎的爬蟲(chóng),做好反爬蟲(chóng)策略,能節(jié)省20%_25%的資源,其實(shí)是變向優(yōu)化了 web系統(tǒng)。
[0003]爬蟲(chóng)請(qǐng)求是類似httpClient的機(jī)制或curl、wget的命令,而正常用戶請(qǐng)求一般走瀏覽器。爬蟲(chóng)請(qǐng)求一般不會(huì)執(zhí)行頁(yè)面里的異步JavaScript操作,而用戶請(qǐng)求則執(zhí)行Jquery提供的異步JavaScript操作。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的在于提供一種針對(duì)爬蟲(chóng)的數(shù)據(jù)處理方法,可以以有效的區(qū)分爬蟲(chóng)請(qǐng)求和正常用戶請(qǐng)求,從而將爬蟲(chóng)請(qǐng)求阻擋,節(jié)省系統(tǒng)資源。
[0005]本發(fā)明的目的主要通過(guò)以下技術(shù)方案實(shí)現(xiàn):一種針對(duì)爬蟲(chóng)的數(shù)據(jù)處理方法,包括以下步驟:
步驟1:管理登錄并利用黑白名單池在后臺(tái)錄入白名單,并將黑名單的操作時(shí)間設(shè)定為X分鐘有效;
步驟2:判斷當(dāng)前登錄頁(yè)面的IP為黑名單還是白名單;
步驟3:當(dāng)前登錄頁(yè)面的IP為白名單時(shí),讓該IP進(jìn)行正常頁(yè)面邏輯操作;
步驟4:當(dāng)前登錄頁(yè)面的IP為黑名單時(shí),讓該IP進(jìn)入驗(yàn)證碼頁(yè)面操作,在該IP寫(xiě)完驗(yàn)證碼后,釋放該IP不在為黑名單,同時(shí)讓該IP進(jìn)行正常頁(yè)面邏輯操作;
步驟5:當(dāng)前登錄頁(yè)面的IP為非黑名單和非白名單時(shí),利用流量統(tǒng)計(jì)工具進(jìn)行篩查,進(jìn)入計(jì)數(shù)器池,在Cache計(jì)數(shù)器會(huì)在Cache計(jì)數(shù)器過(guò)期前加I操作,然后比較累加后的計(jì)數(shù)值和閥值,當(dāng)計(jì)數(shù)值小于閥值,判定該IP為非爬蟲(chóng),讓該IP進(jìn)行正常頁(yè)面邏輯操作,當(dāng)計(jì)數(shù)值大于閥值,將該IP設(shè)置成黑名單,并讓該IP進(jìn)入驗(yàn)證碼頁(yè)面操作,在該IP寫(xiě)完驗(yàn)證碼后,釋放該IP不在為黑名單,若該IP不填寫(xiě)驗(yàn)證碼,則判定該IP為爬蟲(chóng);
步驟6:當(dāng)該IP退出登錄頁(yè)面時(shí),異步的JS請(qǐng)求,cache計(jì)數(shù)值減I操作。
[0006]上述方法的設(shè)置原理在于:由于爬蟲(chóng)請(qǐng)求是類似httpClient的機(jī)制或curl、wget的命令,而正常用戶請(qǐng)求一般走瀏覽器。爬蟲(chóng)請(qǐng)求一般不會(huì)執(zhí)行頁(yè)面里的異步JavaScript操作,而用戶請(qǐng)求則執(zhí)行Jquery提供的異步JavaScript操作。
[0007]因此,本發(fā)明利用異步JavaScript操作,從而篩選出爬蟲(chóng)請(qǐng)求,并將爬蟲(chóng)請(qǐng)求設(shè)置成黑名單。同時(shí)由于網(wǎng)絡(luò)IP的變化,有時(shí)同一個(gè)IP前一天為黑名單,而第二天則是正常用戶登錄請(qǐng)求,因此不能將所有的IP設(shè)置為一成不變的固定死請(qǐng)求IP,因此需要實(shí)時(shí)沿著當(dāng)前黑名單,同時(shí)利用異步JavaScript操作區(qū)分當(dāng)前黑名單是否繼續(xù)為爬蟲(chóng)請(qǐng)求。
[0008]WEB系統(tǒng)都是走h(yuǎn)ttp協(xié)議跟WEB容器連通的,每次請(qǐng)求至少會(huì)產(chǎn)生一次客戶端與服務(wù)器的tcp連接。通過(guò)netstat命令,就可以查看到當(dāng)前同時(shí)連接服務(wù)器所對(duì)應(yīng)的IP以及連接量。命令/bin/netstat _nat _n | grep 80 —般都幾百或幾千個(gè)。同一個(gè)IP對(duì)應(yīng)的連接數(shù)超過(guò)我們觀察到的一個(gè)閥值時(shí),就可判斷為非正常的用戶請(qǐng)求。閥值設(shè)定至關(guān)重要,大型網(wǎng)吧或同一個(gè)學(xué)校、公司出來(lái)的IP也可能會(huì)被誤判為非法請(qǐng)求。此策略包括兩個(gè)定時(shí)腳本,一個(gè)定時(shí)封IP ( tcpForbidCmd.sh ),一個(gè)定時(shí)釋放IP ( tcpReleaseCmd.sh),分別是每隔5分鐘和40分鐘各執(zhí)行一次。此策略相當(dāng)于給我們的系統(tǒng)設(shè)定了門(mén)檻,類似公路交通系統(tǒng)內(nèi),某馬路設(shè)定限高4米欄桿,高于4米的車不能在此通行。該策略能預(yù)防惡意的或新手寫(xiě)的請(qǐng)求頻率不規(guī)則的爬蟲(chóng)。
[0009]本發(fā)明的反爬蟲(chóng)過(guò)濾機(jī)制實(shí)現(xiàn)起來(lái)也比較簡(jiǎn)單,我們可以用memcached或本地內(nèi)存來(lái)做訪問(wèn)計(jì)數(shù)器,在緩存過(guò)期之前的時(shí)間段內(nèi)(如3分鐘),每個(gè)IP訪問(wèn)一次,計(jì)數(shù)器加1,緩存的KEY包括IP,通過(guò)計(jì)數(shù)器得到的值,判斷超過(guò)一個(gè)閥值,這個(gè)IP很可能有問(wèn)題,那么就可以返回一個(gè)驗(yàn)證碼頁(yè)面,要求用戶填寫(xiě)驗(yàn)證碼。如果是爬蟲(chóng)的話,當(dāng)然不可能填寫(xiě)驗(yàn)證碼,就被拒掉了,保護(hù)了后端的資源。閥值的設(shè)定也是很重要的,不同的系統(tǒng)不一樣。我們將這個(gè)過(guò)濾機(jī)制改進(jìn)一下,將更加準(zhǔn)確。即我們?cè)诰W(wǎng)頁(yè)的最下面添加一個(gè)JS的異步請(qǐng)求,此異步請(qǐng)求用來(lái)減計(jì)數(shù)器的值,進(jìn)頁(yè)面時(shí)對(duì)IP進(jìn)行加值,出頁(yè)面時(shí)減值,生成一個(gè)差值。根據(jù)我們之前的分析,爬蟲(chóng)不會(huì)執(zhí)行異步JS減值請(qǐng)求。這樣可以從生成的值的大小上判斷這個(gè)IP是否為爬蟲(chóng)。
[0010]X分鐘設(shè)置為30分鐘。
[0011]設(shè)定計(jì)數(shù)器池Y分鐘后過(guò)期,Y分鐘設(shè)置成3分鐘。
[0012]本發(fā)明的優(yōu)點(diǎn)在于:成本低,可以以有效的區(qū)分爬蟲(chóng)請(qǐng)求和正常用戶請(qǐng)求,從而將爬蟲(chóng)請(qǐng)求阻擋,節(jié)省系統(tǒng)資源,同時(shí)避免誤判斷正常用戶請(qǐng)求。
【附圖說(shuō)明】
[0013]圖1為本發(fā)明的流程示意圖。
【具體實(shí)施方式】
[0014]下面結(jié)合實(shí)施例及附圖對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明,但本發(fā)明的實(shí)施方式不限于此。
[0015]實(shí)施例1:
如圖1所示。
[0016]一種針對(duì)爬蟲(chóng)的數(shù)據(jù)處理方法,包括以下步驟:
步驟1:管理登錄并利用黑白名單池在后臺(tái)錄入白名單,并將黑名單的操作時(shí)間設(shè)定為X分鐘有效;
步驟2:判斷當(dāng)前登錄頁(yè)面的IP為黑名單還是白名單;
步驟3:當(dāng)前登錄頁(yè)面的IP為白名單時(shí),讓該IP進(jìn)行正常頁(yè)面邏輯操作;
步驟4:當(dāng)前登錄頁(yè)面的IP為黑名單時(shí),讓該IP進(jìn)入驗(yàn)證碼頁(yè)面操作,在該IP寫(xiě)完驗(yàn)證碼后,釋放該IP不在為黑名單,同時(shí)讓該IP進(jìn)行正常頁(yè)面邏輯操作;
步驟5:當(dāng)前登錄頁(yè)面的IP為非黑名單和非白名單時(shí),利用流量統(tǒng)計(jì)工具進(jìn)行篩查,進(jìn)入計(jì)數(shù)器池,在Cache計(jì)數(shù)器會(huì)在Cache計(jì)數(shù)器過(guò)期前加I操作,然后比較累加后的計(jì)數(shù)值和閥值,當(dāng)計(jì)數(shù)值小于閥值,判定該IP為非爬蟲(chóng),讓該IP進(jìn)行正常頁(yè)面邏輯操作,當(dāng)計(jì)數(shù)值大于閥值,將該IP設(shè)置成黑名單,并讓該IP進(jìn)入驗(yàn)證碼頁(yè)面操作,在該IP寫(xiě)完驗(yàn)證碼后,釋放該IP不在為黑名單,若該IP不填寫(xiě)驗(yàn)證碼,則判定該IP為爬蟲(chóng);
步驟6:當(dāng)該IP退出登錄頁(yè)面時(shí),異步的JS請(qǐng)求,cache計(jì)數(shù)值減I操作。
[0017]上述方法的設(shè)置原理在于:由于爬蟲(chóng)請(qǐng)求是類似httpClient的機(jī)制或curl、wget的命令,而正常用戶請(qǐng)求一般走瀏覽器。爬蟲(chóng)請(qǐng)求一般不會(huì)執(zhí)行頁(yè)面里的異步JavaScript操作,而用戶請(qǐng)求則執(zhí)行Jquery提供的異步JavaScript操作。
[0018]因此,本發(fā)明利用異步JavaScript操作,從而篩選出爬蟲(chóng)請(qǐng)求,并將爬蟲(chóng)請(qǐng)求設(shè)置成黑名單。同時(shí)由于網(wǎng)絡(luò)IP的變化,有時(shí)同一個(gè)IP前一天為黑名單,而第二天則是正常用戶登錄請(qǐng)求,因此不能將所有的IP設(shè)置為一成不變的固定死請(qǐng)求IP,因此需要實(shí)時(shí)沿著當(dāng)前黑名單,同時(shí)利用異步JavaScript操作區(qū)分當(dāng)前黑名單是否繼續(xù)為爬蟲(chóng)請(qǐng)求。
[0019]WEB系統(tǒng)都是走h(yuǎn)ttp協(xié)議跟WEB容器連通的,每次請(qǐng)求至少會(huì)產(chǎn)生一次客戶端與服務(wù)器的tcp連接。通過(guò)netstat命令,就可以查看到當(dāng)前同時(shí)連接服務(wù)器所對(duì)應(yīng)的IP以及連接量。命令/bin/netstat _nat _n | grep 80 —般都幾百或幾千個(gè)。同一個(gè)IP對(duì)應(yīng)的連接數(shù)超過(guò)我們觀察到的一個(gè)閥值時(shí),就可判斷為非正常的用戶請(qǐng)求。閥值設(shè)定至關(guān)重要,大型網(wǎng)吧或同一個(gè)學(xué)校、公司出來(lái)的IP也可能會(huì)被誤判為非法請(qǐng)求。此策略包括兩個(gè)定時(shí)腳本,一個(gè)定時(shí)封IP ( tcpForbidCmd.sh ),一個(gè)定時(shí)釋放IP ( tcpReleaseCmd.sh),分別是每隔5分鐘和40分鐘各執(zhí)行一次。此策略相當(dāng)于給我們的系統(tǒng)設(shè)定了門(mén)檻,類似公路交通系統(tǒng)內(nèi),某馬路設(shè)定限高4米欄桿,高于4米的車不能在此通行。該策略能預(yù)防惡意的或新手寫(xiě)的請(qǐng)求頻率不規(guī)則的爬蟲(chóng)。
[0020]本發(fā)明的反爬蟲(chóng)過(guò)濾機(jī)制實(shí)現(xiàn)起來(lái)也比較簡(jiǎn)單,我們可以用memcached或本地內(nèi)存來(lái)做訪問(wèn)計(jì)數(shù)器,在緩存過(guò)期之前的時(shí)間段內(nèi)(如3分鐘),每個(gè)IP訪問(wèn)一次,計(jì)數(shù)器加1,緩存的KEY包括IP,通過(guò)計(jì)數(shù)器得到的值,判斷超過(guò)一個(gè)閥值,這個(gè)IP很可能有問(wèn)題,那么就可以返回一個(gè)驗(yàn)證碼頁(yè)面,要求用戶填寫(xiě)驗(yàn)證碼。如果是爬蟲(chóng)的話,當(dāng)然不可能填寫(xiě)驗(yàn)證碼,就被拒掉了,保護(hù)了后端的資源。閥值的設(shè)定也是很重要的,不同的系統(tǒng)不一樣。我們將這個(gè)過(guò)濾機(jī)制改進(jìn)一下,將更加準(zhǔn)確。即我們?cè)诰W(wǎng)頁(yè)的最下面添加一個(gè)JS的異步請(qǐng)求,此異步請(qǐng)求用來(lái)減計(jì)數(shù)器的值,進(jìn)頁(yè)面時(shí)對(duì)IP進(jìn)行加值,出頁(yè)面時(shí)減值,生成一個(gè)差值。根據(jù)我們之前的分析,爬蟲(chóng)不會(huì)執(zhí)行異步JS減值請(qǐng)求。這樣可以從生成的值的大小上判斷這個(gè)IP是否為爬蟲(chóng)。
[0021 ] X分鐘設(shè)置為30分鐘。
[0022]設(shè)定計(jì)數(shù)器池Y分鐘后過(guò)期,Y分鐘設(shè)置成3分鐘。
[0023]如上所述,則能很好的實(shí)現(xiàn)本發(fā)明。
【主權(quán)項(xiàng)】
1.一種針對(duì)爬蟲(chóng)的數(shù)據(jù)處理方法,其特征在于:包括以下步驟: 步驟1:管理登錄并利用黑白名單池在后臺(tái)錄入白名單,并將黑名單的操作時(shí)間設(shè)定為X分鐘有效; 步驟2:判斷當(dāng)前登錄頁(yè)面的IP為黑名單還是白名單; 步驟3:當(dāng)前登錄頁(yè)面的IP為白名單時(shí),讓該IP進(jìn)行正常頁(yè)面邏輯操作; 步驟4:當(dāng)前登錄頁(yè)面的IP為黑名單時(shí),讓該IP進(jìn)入驗(yàn)證碼頁(yè)面操作,在該IP寫(xiě)完驗(yàn)證碼后,釋放該IP不在為黑名單,同時(shí)讓該IP進(jìn)行正常頁(yè)面邏輯操作; 步驟5:當(dāng)前登錄頁(yè)面的IP為非黑名單和非白名單時(shí),利用流量統(tǒng)計(jì)工具進(jìn)行篩查,進(jìn)入計(jì)數(shù)器池,在Cache計(jì)數(shù)器會(huì)在Cache計(jì)數(shù)器過(guò)期前加I操作,然后比較累加后的計(jì)數(shù)值和閥值,當(dāng)計(jì)數(shù)值小于閥值,判定該IP為非爬蟲(chóng),讓該IP進(jìn)行正常頁(yè)面邏輯操作,當(dāng)計(jì)數(shù)值大于閥值,將該IP設(shè)置成黑名單,并讓該IP進(jìn)入驗(yàn)證碼頁(yè)面操作,在該IP寫(xiě)完驗(yàn)證碼后,釋放該IP不在為黑名單,若該IP不填寫(xiě)驗(yàn)證碼,則判定該IP為爬蟲(chóng); 步驟6:當(dāng)該IP退出登錄頁(yè)面時(shí),異步的JS請(qǐng)求,cache計(jì)數(shù)值減I操作。2.根據(jù)權(quán)利要求1所述的一種針對(duì)爬蟲(chóng)的數(shù)據(jù)處理方法,其特征在于:X分鐘設(shè)置為30分鐘。3.根據(jù)權(quán)利要求1所述的一種針對(duì)爬蟲(chóng)的數(shù)據(jù)處理方法,其特征在于:設(shè)定計(jì)數(shù)器池Y分鐘后過(guò)期,Y分鐘設(shè)置成3分鐘。
【專利摘要】本發(fā)明公開(kāi)了一種針對(duì)爬蟲(chóng)的數(shù)據(jù)處理方法,步驟1:管理登錄并利用黑白名單池在后臺(tái)錄入白名單,并將黑名單的操作時(shí)間設(shè)定為X分鐘有效;判斷當(dāng)前登錄頁(yè)面的IP為黑名單還是白名單;步驟3:當(dāng)前登錄頁(yè)面的IP為白名單時(shí),讓該IP進(jìn)行正常頁(yè)面邏輯操作;步驟4:當(dāng)前登錄頁(yè)面的IP為黑名單時(shí),讓該IP進(jìn)入驗(yàn)證碼頁(yè)面操作,在該IP寫(xiě)完驗(yàn)證碼后,釋放該IP不在為黑名單,讓該IP進(jìn)行正常頁(yè)面邏輯操作;步驟5:當(dāng)前登錄頁(yè)面的IP為非黑名單和非白名單時(shí),進(jìn)入計(jì)數(shù)器池,在Cache計(jì)數(shù)器會(huì)在Cache計(jì)數(shù)器過(guò)期前加1操作,比較累加后的計(jì)數(shù)值和閥值,當(dāng)計(jì)數(shù)值小于閥值,判定該IP為非爬蟲(chóng),當(dāng)計(jì)數(shù)值大于閥值,則判定該IP為爬蟲(chóng)。
【IPC分類】H04L29/08, H04L29/06
【公開(kāi)號(hào)】CN104902008
【申請(qǐng)?zhí)枴緾N201510200123
【發(fā)明人】嚴(yán)瀾
【申請(qǐng)人】成都創(chuàng)行信息科技有限公司
【公開(kāi)日】2015年9月9日
【申請(qǐng)日】2015年4月26日