◆付順順
(1.安徽省公安教育研究院 安徽 230088; 2.安徽公安職業(yè)學(xué)院 安徽 230031 )
賭博問(wèn)題滋生違法犯罪、對(duì)社會(huì)安全穩(wěn)定和人民群眾財(cái)產(chǎn)安全等造成嚴(yán)重危害。隨著互聯(lián)網(wǎng)的快速發(fā)展,利用互聯(lián)網(wǎng)和網(wǎng)上金融支付手段進(jìn)行賭博的現(xiàn)象迅速發(fā)展。據(jù)《人民公安報(bào)》報(bào)道,2019年全國(guó)公安機(jī)關(guān)共偵破網(wǎng)絡(luò)賭博刑事案件7200余起,抓獲犯罪嫌疑人2.5萬(wàn)名,查扣凍結(jié)涉賭資金逾180億元,這一系列數(shù)字表明,我國(guó)的防控治理工作面臨的形勢(shì)依然嚴(yán)峻復(fù)雜[1]。當(dāng)前網(wǎng)絡(luò)賭博的一種重要表現(xiàn)形式就是開(kāi)設(shè)專門(mén)賭博網(wǎng)站,采用嚴(yán)密的內(nèi)部分級(jí)制度發(fā)展不同級(jí)別的會(huì)員,邀約賭博人員、利用特定對(duì)象設(shè)立賭博規(guī)則等組織不特定的境內(nèi)人員,通過(guò)各種形式參賭。因此,收集和分析賭博類網(wǎng)站,有助于從源頭治理網(wǎng)絡(luò)賭博案件的發(fā)生。網(wǎng)絡(luò)賭博,作為一個(gè)需要大規(guī)模不同階層的人群參與的違法活動(dòng),為了保證目標(biāo)人群的接入方便性,從而要求此類網(wǎng)站需依托于互聯(lián)網(wǎng)技術(shù)存在,而不是像暗網(wǎng)一樣。這就使得我們可以使用網(wǎng)絡(luò)爬蟲(chóng)采集賭博網(wǎng)站數(shù)據(jù)。
網(wǎng)絡(luò)爬蟲(chóng),是實(shí)現(xiàn)自動(dòng)瀏覽網(wǎng)頁(yè)和網(wǎng)頁(yè)數(shù)據(jù)抓取的計(jì)算機(jī)應(yīng)用程序。Scrapy 是使用 Python 編寫(xiě)的爬蟲(chóng)應(yīng)用框架程序,具有結(jié)構(gòu)簡(jiǎn)單、使用方便的特點(diǎn),用戶借助Scrapy可以快速瀏覽下載網(wǎng)頁(yè)信息,并根據(jù)需要保存關(guān)鍵數(shù)據(jù)為需要的數(shù)據(jù)格式。目前,Scrapy 被廣泛應(yīng)用于數(shù)據(jù)挖掘領(lǐng)域,已經(jīng)發(fā)展成為數(shù)據(jù)挖掘研究領(lǐng)域重要的應(yīng)用工具。本研究將以某賭博網(wǎng)站為例,基于Scrapy 設(shè)計(jì)爬蟲(chóng),并將該爬蟲(chóng)應(yīng)用其他賭博網(wǎng)站并存儲(chǔ),以期為賭博網(wǎng)站數(shù)據(jù)的進(jìn)一步挖掘利用提供基礎(chǔ)。
Scrapy主要分為5部分:Scrapy Engine(引擎)、Scheduler(調(diào)度器)、Spiders(蜘 蛛)、Item Pipeline(數(shù)據(jù)處理流水線)和Downloader(下載器)如圖1所示。
具體流程是:首先,引擎(Engine)將初始URL(s)交給處理該網(wǎng)站的Spider,并在調(diào)度器(Scheduler)以Request調(diào)度,之后引擎向調(diào)度器請(qǐng)求下一個(gè)要爬取的URL,調(diào)度器返回下一個(gè)要爬取的URL給引擎,引擎將URL通過(guò)下載中間件轉(zhuǎn)發(fā)給下載器(Downloader),一旦頁(yè)面下載完畢,下載器生成一個(gè)該頁(yè)面的Response,并將其通過(guò)下載中間件發(fā)送給引擎,引擎從下載器中接收到Response并通過(guò)Spider中間件發(fā)送給Spider處理,Spider處理Response并返回爬取到的Item及(跟進(jìn)的)新的Request給引擎,引擎將爬取到的Item給Item Pipeline,將(Spider返回的)Request給調(diào)度器,重復(fù)執(zhí)行直到調(diào)度器中沒(méi)有更多地request,引擎關(guān)閉該網(wǎng)站[2]。
原有的賭博網(wǎng)站數(shù)據(jù)采集同大部分網(wǎng)絡(luò)爬蟲(chóng)程序一致,主要關(guān)注某一具體HTML標(biāo)簽中的內(nèi)容,如網(wǎng)頁(yè)head、title等特定標(biāo)簽,并以這些內(nèi)容作為特征,進(jìn)行賭博網(wǎng)站的識(shí)別。通過(guò)研究發(fā)現(xiàn),現(xiàn)在部分賭博網(wǎng)站的特定標(biāo)簽內(nèi)容不具有實(shí)際意義。為了能很好地支持后續(xù)研究,提高賭博網(wǎng)站的自動(dòng)識(shí)別率,本文將從初始url出發(fā),并以該url為限定域,采集網(wǎng)站的全部頁(yè)面內(nèi)容和存儲(chǔ)[3]。具體步驟如下:
圖1 Scrapy 框架工作流程
(1)使用Scrapy提供的全站爬取類CarwlSpider,方便在爬蟲(chóng)在工作的時(shí)候能自動(dòng)根據(jù)定義的一些規(guī)則判斷探測(cè)到的url鏈接是否需要下載。
(2)為了避免字段出錯(cuò),提高數(shù)據(jù)傳遞過(guò)程的準(zhǔn)確性,使用Scrapy中的 item文件集中創(chuàng)建需要爬取的字段屬性類,在其他需要的地方實(shí)例化該類即可,通過(guò)此種方式的被實(shí)例化的類的字段可直接被傳遞到pipelinet文件中集中處理字段值的保存事項(xiàng)。本爬蟲(chóng)中需要在 item 中定義的字段有四個(gè):“url”,當(dāng)前頁(yè)面的url;“url_md5”,當(dāng)前頁(yè)面的 urlde md5 值,方便檢索;“url_text”,頁(yè)面內(nèi)容;“url_text_samples”,去除頁(yè)面內(nèi)容的標(biāo)簽。
(3)設(shè)置一個(gè)common文件,放置一些常用的處理函數(shù),比如url的md5處理。
(4)在setting文件中打開(kāi)自動(dòng)接收并處理的pipeline管道,并在 pipelines中設(shè)置所有數(shù)據(jù)的存儲(chǔ)和處理,本爬蟲(chóng)采用的是csv存儲(chǔ)。
(5)突破反爬蟲(chóng)機(jī)制,當(dāng)前大部分網(wǎng)站的反爬蟲(chóng)策略會(huì)對(duì)訪問(wèn)用戶的User Agent進(jìn)行檢查,為保證爬蟲(chóng)的有效進(jìn)行,收集當(dāng)前用戶還在使用的瀏覽器的User Agent,在每次請(qǐng)求頁(yè)面時(shí)隨機(jī)替換。
(6)將 robot協(xié)議改為不要遵守,避免尋找網(wǎng)站里面的robots.txt,導(dǎo)致爬蟲(chóng)會(huì)很快停掉。
(7)創(chuàng)建analysis.py,對(duì)采集到的數(shù)據(jù)進(jìn)行簡(jiǎn)單分析。
由于 Scrapy是一個(gè)框架,為了能正常使用這個(gè)框架的各個(gè)中間件和接口,需要項(xiàng)目自動(dòng)創(chuàng)建,具體命令:
scrapy startproject 爬蟲(chóng)項(xiàng)目名
此時(shí)只是創(chuàng)建了一個(gè)工程框架,但還沒(méi)有爬蟲(chóng)。接下來(lái),創(chuàng)建爬蟲(chóng)文件,在Scrapy中提供了多種爬蟲(chóng)模板,由于本爬蟲(chóng)時(shí)整站爬取,故使用CarwlSpider,具體命令如下:
scrapy genspider -t crawl vns36101 vns36101.com
其中,通過(guò)-t指定使用 crawl模板創(chuàng)建crawlspider整站爬蟲(chóng),爬蟲(chóng)的名字是vns36101,要爬取的域名范圍是vns36101.com。
通過(guò)使用 crawl模板創(chuàng)建crawlspider整站爬蟲(chóng)時(shí),在爬蟲(chóng)主程序文件中重點(diǎn)只需編寫(xiě)兩項(xiàng)內(nèi)容。首先是url鏈接規(guī)則分析,由于本爬蟲(chóng)時(shí)為了重點(diǎn)保存頁(yè)面,因此我們 Rule規(guī)則的設(shè)為L(zhǎng)inkExtractor(allow=r'.*'),“.*”,即正則表達(dá)式的所有頁(yè)面。其次是編寫(xiě)頁(yè)面解析字段,本例中采用的是 ItemLoader實(shí)例化在items中寫(xiě)好的本爬蟲(chóng)的item對(duì)象,包含四個(gè)字段。本頁(yè)面主要代碼如圖2所示。
在scrapy中定義結(jié)構(gòu)化字段,都在items.py中。在數(shù)據(jù)通過(guò)return到此處是還可以通過(guò)MapCompose加載自定義的處理字段的函數(shù)。本爬蟲(chóng)在處理 url_text_samples時(shí)使用了一個(gè)去除所有空格和換行符的函數(shù),使得該字段存儲(chǔ)的都是文本,具體如圖3所示。
圖3 items.py
在pipelines.py中創(chuàng)建本爬蟲(chóng)中使用的時(shí)csv格式存儲(chǔ),具體參考如圖4。
圖4 pipelines.py
為了可視化該賭博網(wǎng)站的主要關(guān)鍵詞,在本爬蟲(chóng)中還實(shí)現(xiàn)了簡(jiǎn)單的網(wǎng)頁(yè)內(nèi)容分析[4-5]。具體分析方式時(shí)將爬出獲取的整站數(shù)據(jù)里面的url_text_samples字段的值讀取之后合并,隨后用jieba分詞進(jìn)行分詞,,得到詞文件之后采用,textrank算法抽取該網(wǎng)站的關(guān)鍵詞,最后通過(guò)wordcloud將該網(wǎng)站的關(guān)鍵詞的其云圖生成如圖5所示。
圖5 詞云圖
通過(guò)具體分析發(fā)現(xiàn),在該賭博網(wǎng)站中,關(guān)鍵詞的前50個(gè)中具有非常明顯的博彩、彩票、投注等詞這,這些特征對(duì)實(shí)現(xiàn)進(jìn)一步分析有非常強(qiáng)的指導(dǎo)意義,如圖6。
圖6 前50個(gè)關(guān)鍵詞
本文基于 Scrapy框架實(shí)現(xiàn)賭博網(wǎng)站爬蟲(chóng),通過(guò) crawlspider模板的整站爬蟲(chóng),達(dá)到了預(yù)期爬取數(shù)量和質(zhì)量。此外通過(guò)簡(jiǎn)單分析,得知賭博網(wǎng)站的整個(gè)網(wǎng)站的文字特性非常強(qiáng),可以用于指導(dǎo)進(jìn)步對(duì)賭博網(wǎng)站的分析。