丁橋 宋曉駿 余思瑩
(中國電信股份有限公司上海分公司信息網(wǎng)絡(luò)部 上海市 200085)
用戶規(guī)模持續(xù)增長,下沉市場用戶加快拓展。隨著網(wǎng)絡(luò)提速降費的推進和智能手機終端的推廣,互聯(lián)網(wǎng)內(nèi)容大幅增加。而與此同時,某些不法分子也開始利用網(wǎng)絡(luò)來傳播色情、詐騙、賭博等不良信息,由此造成的信息安全問題。根據(jù)“誰主管誰負責(zé),誰審批誰負責(zé),誰經(jīng)營誰負責(zé),誰接入誰負責(zé)”原則,電信運營商在大力發(fā)展業(yè)務(wù)的同時,也感受到前所未有的來自信息安全方面的壓力。信息內(nèi)容安全主要針對網(wǎng)站網(wǎng)頁進行爬蟲采集,通過關(guān)鍵字過濾,結(jié)合語義智能分析、人工識別等方式,鑒別出有害的內(nèi)容,進而采取網(wǎng)頁刪除、IP封堵等方式下線有害內(nèi)容,維護互聯(lián)網(wǎng)健康的環(huán)境。本文主要關(guān)注在網(wǎng)站網(wǎng)頁爬蟲采集階段,如何采用網(wǎng)頁內(nèi)容去重技術(shù),快速比對出已經(jīng)處理入庫的安全網(wǎng)頁和需要后續(xù)處理的“新”網(wǎng)頁,去除大量爬取來的重復(fù)網(wǎng)頁,降低后續(xù)處理量,提高不良信息的監(jiān)測和處理效率。
本文針對采集的網(wǎng)頁數(shù)量龐大(億級),單個的爬蟲無法完成,因此爬蟲必須基于分布式架構(gòu)。通過建立分布式爬蟲,提高爬蟲覆蓋面,提升網(wǎng)頁獲取速度,同時提高爬取質(zhì)量,為不良信息監(jiān)測提供覆蓋面廣泛,時效性高,具有一定深度的數(shù)據(jù)。
為提高爬蟲效率,保證數(shù)據(jù)獲取的時效性。爬蟲模塊的構(gòu)建是分布式多爬蟲共享隊列的主題爬蟲。主要特點如下:
分布式爬蟲:為了提高爬蟲的并發(fā)及穩(wěn)定性,將建設(shè)分布式爬蟲抓取系統(tǒng),主要包括以下功能,爬取策略的設(shè)計,增量爬取,請求去重,爬蟲防屏蔽中間件,網(wǎng)頁非200狀態(tài)處理,爬蟲下載異常處理和數(shù)據(jù)存儲。
結(jié)構(gòu)化采集技術(shù):對非結(jié)構(gòu)化的網(wǎng)頁數(shù)據(jù)在采集的時候進行結(jié)構(gòu)化的信息抽取和數(shù)據(jù)存儲,以滿足多維度的信息挖掘和統(tǒng)計需要。
定時監(jiān)控:可根據(jù)需求進行定時監(jiān)控,實際應(yīng)用中擬實現(xiàn)小時級的采集更新。
反爬策略應(yīng)對:目前不少網(wǎng)站都運用了反爬蟲技術(shù)來阻止外來訪客進行高頻大量的數(shù)據(jù)爬取,這給數(shù)據(jù)爬取帶來了不小的困難。針對各種可能存在的反爬策略,可通過cookie池,模擬點擊,逆向JS等來預(yù)防應(yīng)對。
爬蟲爬取采集到的大量網(wǎng)頁中,會有很多重復(fù)數(shù)據(jù),因此需要設(shè)計去重算法,針對海量千萬級的數(shù)據(jù)進行高效的合并去重。如何快速全面發(fā)現(xiàn)這些重復(fù)信息.快速準(zhǔn)確地去重這些內(nèi)容上相同或相似的網(wǎng)頁已經(jīng)成為快速識別有害網(wǎng)頁的關(guān)鍵技術(shù)之一。
根據(jù)網(wǎng)頁內(nèi)容的匹配程度、顆粒度特點分為:URL去重、內(nèi)容去重、網(wǎng)頁去重三個級別。
URL去重是針對同一來源的輿情數(shù)據(jù)進行去重,去除已經(jīng)爬取過的URL,避免重復(fù)爬取影響爬蟲效率,以及冗余數(shù)據(jù)產(chǎn)生。
內(nèi)容去重是指有些熱點輿情具有集中程度高的特點,熱點新聞的重復(fù)率遠高于其他內(nèi)容,由于人們對這些信息的關(guān)注,致使互聯(lián)網(wǎng)上各網(wǎng)站爭相轉(zhuǎn)載,尤其是新近發(fā)布的熱點信息,時間集中程度高,其內(nèi)容和結(jié)構(gòu)高度一致,因此對輿情內(nèi)容的去重依據(jù)標(biāo)題及正文級別兩個級別,對標(biāo)題使用較為寬松的相似度計算方法,對輸入的文本進行分詞,去除沒有意義的通用詞和高頻詞,對標(biāo)題相似的文檔再進行內(nèi)容相似度的計算。
網(wǎng)頁去重是通過技術(shù)手段對已處理的網(wǎng)頁進行標(biāo)注,后續(xù)的網(wǎng)頁的處理過程中通過對標(biāo)注進行快速比對,就可以避免網(wǎng)頁重復(fù)處理,從而提高有害網(wǎng)頁的識別速度。目前常用技術(shù)手段是通過hash編碼等文本向數(shù)字串映射方式以方便后續(xù)的特征存儲以及特征比較.起到減少存儲空間,加快比較速度的作用。每個網(wǎng)頁都采用hash函數(shù)編碼(比如MD5),這樣只要編碼相同就說明網(wǎng)頁完全相同[1]。
本文主要描述網(wǎng)頁去重的實現(xiàn)。網(wǎng)頁去重的帶來的好處有以下兩點:
(1)能大幅提升爬蟲爬取網(wǎng)頁的效率,對于相同網(wǎng)頁不需要重復(fù)判斷其內(nèi)容是否是屬于有害信息。
(2)能夠節(jié)省一部分存儲空間,進而可以利用這部分空間來存放更多的有效網(wǎng)頁內(nèi)容,同時也提高了爬蟲數(shù)據(jù)的質(zhì)量[2][3]。
MD5信息摘要算法是一種流行的散列算法標(biāo)準(zhǔn),它是為任何文件,不管其大小格式,都提取出128位的摘要信息,形成數(shù)字“指紋”。這樣的“指紋”可以用于密碼管理、電子簽名、垃圾郵件篩選等各種用途。MD5是128bit的散列碼,其安全性還是能得到保障的。具有相同散列碼的兩個網(wǎng)頁需要2的64次方數(shù)量級的操作,所以對于網(wǎng)頁來說,通過采用MD5算法對網(wǎng)頁進行計算,得到的MD5值作為網(wǎng)頁的“獨一無二”的標(biāo)志是可行的。再通過對MD5值進行快速地比對和篩選,就等于對網(wǎng)頁進行快速地比對和篩選,大幅提高網(wǎng)頁的去重比對能力[4][5]。
Redis是目前流行的NoSQL數(shù)據(jù)庫之一,包含多種數(shù)據(jù)結(jié)構(gòu)、支持網(wǎng)絡(luò)、基于內(nèi)存、可選持久化的鍵值對存儲數(shù)據(jù)庫。應(yīng)用場景包括高頻讀、低頻寫的緩存系統(tǒng)、消息隊列系統(tǒng)、社交網(wǎng)絡(luò)和實時系統(tǒng)。Redis 是目前公認的速度最快的基于內(nèi)存的鍵值對數(shù)據(jù)庫,可作為臨時數(shù)據(jù)的緩存區(qū),可以充分利用內(nèi)存的高速讀寫能力大大提高網(wǎng)頁比對速度。因本文需要的比對網(wǎng)頁數(shù)量巨大,所以需要采用Redis集群來進行處理,
Redis集群在識別過程中存儲兩部分MD5指紋數(shù)據(jù):一是比對程序判定為正常圖片的 MD5指紋,二是比對程序判定為正常文本的 MD5指紋。比對程序接收到爬蟲上傳的壓縮包,解壓后再進行Redis過濾,提取文本、圖片的 MD5依次在上述的Redis數(shù)據(jù)庫中查詢。如果能查到一樣的MD5值,按照隊列的標(biāo)識對文本、圖片進行相應(yīng)去重處理,并刷新庫中數(shù)據(jù)的有效時間。完成 Redis過濾后再進行模型識別,對識別為非重復(fù)的文本、圖片 MD5指紋再進行入庫。
另外比對程序會單獨開一個線程來對 Redis 中的MD5指紋數(shù)據(jù)有效性進行檢測,目前緩存數(shù)據(jù)的時間是一個月,對距離當(dāng)前檢查時間超過一個月的數(shù)據(jù)記錄進行刪除。采用該措施主要是為了避免Redis存儲的MD5指紋數(shù)據(jù)長期不清理,導(dǎo)致數(shù)據(jù)量過大,從而影響到新進的MD5指紋和數(shù)據(jù)庫中存儲的MD5指紋之間的比對效率。
本流程已經(jīng)經(jīng)過實際的軟件開發(fā)實現(xiàn)全部的功能,完成了網(wǎng)頁內(nèi)容去重,獲得數(shù)據(jù)比對效率的提升,具體步驟如下:
(1)建立爬蟲任務(wù)后爬蟲模塊對目標(biāo)頁面進行數(shù)據(jù)爬取,爬蟲將記錄爬取數(shù)據(jù)的壓縮包下載保存。
(2)比對程序解壓爬取的壓縮包,并提取新增爬取的頁面及圖片。
(3)比對程序?qū)⑻崛〉捻撁婧蛨D片與Redis庫中記錄的存量MD5指紋數(shù)據(jù)進行比對,判斷新增頁面和圖片是否有歷史記錄。
(4)如與Redis庫中的MD5指紋庫比對重復(fù),則該新增爬取內(nèi)容有歷史記錄,無需再進行不良信息內(nèi)容的識別,直接讀取其歷史研判結(jié)果。歷史研判結(jié)果為不良信息的直接生成處置任務(wù)進行人工審核及處置,研判結(jié)果為正常內(nèi)容則直接過濾丟棄。
(5)如與Redis庫中的MD5指紋庫比對沒有重復(fù),則所爬取的內(nèi)容為新增爬取內(nèi)容,提取記錄其MD5指紋。對其進行不良信息內(nèi)容識別,研判為不良信息的頁面內(nèi)容則生成處置流程進行人工審核,研判為正常頁面內(nèi)容則流程結(jié)束。
不論新增爬取內(nèi)容的研判結(jié)果是否為不良內(nèi)容,都應(yīng)記錄研判結(jié)果并與其MD5指紋關(guān)聯(lián),成為新的存量內(nèi)容識別結(jié)果庫,并增量更新進RedisMD5指紋庫中。網(wǎng)頁去重流程圖如圖1所示。
圖1:網(wǎng)頁去重流程圖
本文通過存量安全MD5指紋庫庫結(jié)合Redis集群多線程識別,可借助Redis集群實現(xiàn)海量網(wǎng)頁的獨立去重,避免單機內(nèi)存不足的尷尬。同時增加了Redis集群識別緩存功能,當(dāng)識別引擎對爬蟲爬取的文件進行識別時,將識別為正常的頁面生成一個MD5指紋并錄入到Redis集群,當(dāng)循環(huán)任務(wù)中重復(fù)爬取到同個頁面時,識別引擎優(yōu)先比對Redis集群中存有的MD5指紋。對MD5指紋未變更的頁面直接判定為安全頁面,不再進行后續(xù)特征識別,提升系統(tǒng)識別效率20倍以上。