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