李方方 陳容華 秦勝男 戴勝
摘? ?要:文章主要以航空公司為背景,通過爬蟲獲取和航班量相關(guān)的事件信息,并且對(duì)這些事件進(jìn)行智能抓取和建模畫像,主要采用了URL去重算法和4種分布式調(diào)度算法進(jìn)行事件抓取,通過近義詞匹配進(jìn)行事件去重,最后對(duì)抓取的事件進(jìn)行畫像建模和可視化展現(xiàn)。
關(guān)鍵詞:大數(shù)據(jù);機(jī)器學(xué)習(xí);智能抓取;畫像
1? ? 大數(shù)據(jù)對(duì)各行業(yè)產(chǎn)生不同程度的影響
隨著互聯(lián)網(wǎng)大數(shù)據(jù)的發(fā)展,網(wǎng)站數(shù)據(jù)、社交媒體數(shù)據(jù)等成為互聯(lián)網(wǎng)大數(shù)據(jù)的重要組成部分。對(duì)于民航業(yè)領(lǐng)域,社會(huì)事件會(huì)在很大程度上影響旅客的出行需求變化,從而影響航空公司飛機(jī)運(yùn)力投放、航班編排、票價(jià)策略調(diào)整等,對(duì)互聯(lián)網(wǎng)事件的準(zhǔn)確抓取和分析能夠幫助航空公司更好地服務(wù)市場(chǎng)、服務(wù)旅客、提升收益。本文主要從互聯(lián)網(wǎng)上抓取對(duì)航空公司有影響的事件,并進(jìn)行分詞及語義等處理,提取事件的屬性建立事件模型以及可視化展現(xiàn)。
2? ? 互聯(lián)網(wǎng)事件的抓取
通過初步分析,對(duì)民航業(yè)可能有影響的事件主要分為如下幾類:政治會(huì)議(例如G20)、展會(huì)、體育賽事、演唱會(huì)、突發(fā)異常天氣等,因此,主要對(duì)這些事件進(jìn)行抓取。下面是比較典型的影響事件以及數(shù)據(jù)源,每個(gè)類型的事件數(shù)據(jù)至少來自2個(gè)數(shù)據(jù)源(網(wǎng)站),影響航班的重要事件主要是展會(huì)、體育賽事、突發(fā)異常天氣、政治會(huì)議、航班信息等,主要的數(shù)據(jù)源是E展會(huì)、中國(guó)會(huì)展門戶、大麥網(wǎng)、永樂票務(wù)、中國(guó)天氣、非常準(zhǔn)等[1]。
3? ? 爬蟲策略
本文采用的爬蟲使用jsoup高效下載頁面,并根據(jù)用戶配置開啟足夠多的線程,或是自動(dòng)識(shí)別博客、新聞的標(biāo)題、正文信息。為了防止反爬蟲,用戶需根據(jù)需要自行添加header和cookie信息,如未添加則使用默認(rèn)的偽造Window下瀏覽器信息。因?yàn)樯婕暗慕y(tǒng)一資源定位符(Uniform Resource Locator,URL)眾多,本文采用URL去重算法,下文介紹了該算法。
3.1? URL去重算法介紹
在網(wǎng)絡(luò)爬蟲的運(yùn)行過程中,當(dāng)抓取模塊完成對(duì)網(wǎng)頁的下載后,解析模塊會(huì)到下載的網(wǎng)頁進(jìn)行解析,抽取嵌套在HTML中指向其他網(wǎng)頁的URL,并將這些URL填充進(jìn)待抓取隊(duì)列以供下一輪抓取?;ヂ?lián)網(wǎng)中網(wǎng)頁相互之間的URL鏈接指向錯(cuò)綜復(fù)雜,解析模塊所抽取到的URL很可能已經(jīng)被抓取過了,如果直接將這些URL加入待抓取隊(duì)列,抓取模塊就會(huì)對(duì)某些網(wǎng)頁進(jìn)行重復(fù)抓取,嚴(yán)重影響爬蟲系統(tǒng)的運(yùn)行效率。為了避免這一情況,需要在填充待抓取隊(duì)列之前對(duì)URL進(jìn)行去重處理,判斷該URL是否已經(jīng)被抓取過,已經(jīng)被抓取過的,則將其丟棄,不予抓取;否則,將其填充進(jìn)待抓取隊(duì)列[2]。
3.2? 本文所用的URL去重算法
本文采用URL去重算法,即任何節(jié)點(diǎn)爬取到的需要爬取的網(wǎng)站URL經(jīng)過篩選后將統(tǒng)一返回主節(jié)點(diǎn),并直接存儲(chǔ)至set中,再進(jìn)行節(jié)點(diǎn)分配,有效避免了重復(fù)URL的出現(xiàn)。
關(guān)鍵代碼如下:
private
if(!nc.getBan().contains(link[i])&&nc.getURL().add(link[i].trim())&&nc.getURL().size()<=nc.getAllLimit())
nc.getNewURL().add(link[i].trim());
利用LinkedHashSet實(shí)現(xiàn)URL去重,如果獲取的URL可以被添加到LinkedHashSet中,則添加到新獲得URL隊(duì)列中。
3.3? 分布式調(diào)度算法
爬蟲任務(wù)根據(jù)用戶設(shè)置的單次節(jié)點(diǎn)爬取量,將獲取到的需要爬取的URL分批發(fā)送給對(duì)應(yīng)節(jié)點(diǎn),既保證所有節(jié)點(diǎn)近似均勻分配,又兼顧了爬蟲的高效和軟件的輕量化。
本爬蟲為用戶提供了直接運(yùn)行、阻塞運(yùn)作、定時(shí)運(yùn)行和間隔運(yùn)行4種調(diào)度方式,可以滿足不同的場(chǎng)景需求,比如直接運(yùn)行方式可以保證多個(gè)爬蟲任務(wù)同時(shí)執(zhí)行互不干擾;阻塞運(yùn)行一般是等爬取任務(wù)結(jié)束后再進(jìn)行其他網(wǎng)站的爬取;定時(shí)運(yùn)行是任務(wù)必須在特定日期執(zhí)行,可以使用fixTimeRun;間隔運(yùn)行是設(shè)置幾個(gè)小時(shí)爬取一次。
網(wǎng)站的自動(dòng)提取進(jìn)程、爬蟲節(jié)點(diǎn)的接收請(qǐng)求服務(wù)器、爬取后的數(shù)據(jù)處理接口、節(jié)點(diǎn)接收程序、請(qǐng)求分析及判斷網(wǎng)站類型啟動(dòng)相應(yīng)爬取程序、普通單獨(dú)頁面的數(shù)據(jù)爬取進(jìn)程、節(jié)點(diǎn)服務(wù)器啟動(dòng)程序。單獨(dú)頁面爬取后將反射調(diào)用數(shù)據(jù)處理接口進(jìn)行處理及數(shù)據(jù)持久化操作,如未添加自定義處理類,則使用程序內(nèi)置的數(shù)據(jù)持久化模塊。
3.4? 網(wǎng)頁自動(dòng)結(jié)構(gòu)化
對(duì)于新聞博客類網(wǎng)頁,能進(jìn)行網(wǎng)頁正文的自動(dòng)抽取、對(duì)正文進(jìn)行自動(dòng)摘要和關(guān)鍵詞分析。本文采用的是Boilerpipe正文提取算法,其基本思想是通過訓(xùn)練獲得一個(gè)分類器來提取出需要的信息,在算法中定義多個(gè)過濾器,即對(duì)TextBlock進(jìn)行過濾,使用機(jī)器學(xué)習(xí)、統(tǒng)計(jì)、啟發(fā)式方法等數(shù)據(jù)挖掘算法判斷哪些是TextBlock所需要的(正文段),給TextBlock加上lable,去除無關(guān)的TextBlock。
4? ? 實(shí)現(xiàn)事件的去重功能
事件的去重功能主要有兩個(gè)方面:(1)不同數(shù)據(jù)源(網(wǎng)站)的事件去重。(2)不同天抓取的事件去重。本文最初采用相似度閾值去重法,但大部分展會(huì)、演唱會(huì)等名稱相似而實(shí)則不同的信息存在被誤刪的現(xiàn)象,如:第X屆、XX站等。最終采取近義詞匹配去重法,結(jié)合時(shí)間及地理位置信息,有效避免了大量信息被誤刪的情況[3]。
4.1? 相似度閾值去重法
相似度閾值去重法的實(shí)現(xiàn)思想是兩個(gè)字符串之間,由一個(gè)轉(zhuǎn)換成另一個(gè)所需的最少編輯操作次數(shù),許可的編輯操作包括將一個(gè)字符替換成另一個(gè)字符,插入一個(gè)字符,刪除一個(gè)字符。算法流程如下:
(1)計(jì)算strA的長(zhǎng)度n,strB的長(zhǎng)度m。
(2)如果n=0, 則最小編輯距離是m,m=0,則最小編輯距離是n。
(3)構(gòu)造一個(gè)(m+1)×(n+1)的矩陣Arr,并初始化矩陣的第一行和第一列分別為0—n,0—m。
(4)兩重循環(huán),遍歷strA,在此基礎(chǔ)上遍歷strB,如果strA[i]=strB[j],那么cost=0,否則cost=1,判斷Arr[j-1][i]+1,Arr[j][i-1]+1, Arr[j-1][i-1]+cost的最小值,將最小值賦值給Arr[j][i]。
(5)循環(huán)結(jié)束后,矩陣的最后一個(gè)元素就是最小編輯距離。
該算法是目前計(jì)算字符串之間距離比較常用的算法,但大部分展會(huì)、演唱會(huì)等名稱相似而實(shí)則不同的信息會(huì)存在被誤刪的現(xiàn)象,比如以大麥網(wǎng)的展會(huì)信息(見圖1)為例,進(jìn)行相似度運(yùn)算。
StringHelper.similarity(" '岳來越快樂'2017岳云鵬相聲專場(chǎng)—太原站", " '岳來越快樂'2017岳云鵬相聲專場(chǎng)—成都站" );
相似度為0.9090909090909091;通過相似度運(yùn)算后,均不符合閾值,會(huì)被誤刪除。
4.2? 近義詞匹配去重法
本文先用相似度運(yùn)算將獲取到的結(jié)構(gòu)化數(shù)據(jù)進(jìn)行初步處理,替換關(guān)鍵詞后再到數(shù)據(jù)庫中進(jìn)行查找匹配。例如:取得數(shù)據(jù)將“()”替換為中文“()”,將“,”替換為“,”,將空格去除等。展會(huì)名稱:替換博覽會(huì)為展覽會(huì),就不會(huì)有誤刪的問題存在了。
5? ? 事件的畫像建模
事件的畫像建模是事件屬性自動(dòng)化提取,在本文中屬性主要包括主辦方級(jí)別、影響區(qū)域范圍、影響力度、影響人群等,本文主要采取屬性自動(dòng)化提取算法,即將不同種類事件采用不同規(guī)則篩選出部分屬性的匹配項(xiàng)。例如,主辦方包含“中華人民共和國(guó)”或“中國(guó)”則為國(guó)家政府組織,包含“世界”或“全球”則為國(guó)際政府組織。
6? ? 事件建模的可視化展現(xiàn)
本文的主視圖采用百度地圖,清晰、準(zhǔn)確地展示熱點(diǎn)的地理位置信息,并提供可交互的動(dòng)態(tài)展示詳細(xì)信息。分時(shí)地區(qū)統(tǒng)計(jì)視圖是根據(jù)用戶選擇的時(shí)間動(dòng)態(tài)生成該時(shí)間段內(nèi)各省份的各種數(shù)據(jù)總量,并展示在小型中國(guó)地圖中。全局日期統(tǒng)計(jì)視圖是把數(shù)據(jù)庫中所有當(dāng)年的數(shù)據(jù),按日期分類統(tǒng)計(jì),并生成一個(gè)3D視圖,其中x軸為日期,y軸為月份,z軸為數(shù)量。局部日期統(tǒng)計(jì)視圖是把該場(chǎng)館在該時(shí)間段內(nèi)所有類型數(shù)據(jù)的開始時(shí)間展示到二維日歷視圖中。
[參考文獻(xiàn)]
[1]梁正友,張林才.基于Rabin指紋方法的URL去重算法[J].計(jì)算機(jī)應(yīng)用,2008(S2):185-186,203.
[2]李婷.分布式爬蟲任務(wù)調(diào)度與AJAX頁面抓取研究[D].成都:電子科技大學(xué),2015.
[3]MESBAH A V,DEURSEN S,LENSELINK.Crawling AJAX-based Web applications through dynamic analysis of user interface static changes[J].ACM Transactions on the Web,2012(1):30.
Abstract:This article mainly takes the airline as the background, through the reptile to obtain and flight volume-related event information, and the capture of these events intelligent and modeling. The URL de-heavy algorithm and four distributed scheduling algorithms are used to carry out event crawling, and the event to be re-emphasised by close word matching, and finally the image modeling and visual representation of the crawled events is carried out.
Key words:big data; machine learning; intelligent crawl; portrait