劉江,劉國璽,張雁,呂丹桔
(西南林業(yè)大學(xué)大數(shù)據(jù)與智能工程學(xué)院,昆明 650224)
隨著信息技術(shù),網(wǎng)絡(luò)技術(shù)的發(fā)展,Internet成為匯聚信息的中心載體。如何高效便捷地收集和提取In?ternet上的信息,是一項(xiàng)巨大的挑戰(zhàn)。網(wǎng)絡(luò)爬蟲是按照一定規(guī)則,能夠自動地對萬維網(wǎng)網(wǎng)頁信息進(jìn)行下載的計(jì)算機(jī)程序或腳本。聚焦網(wǎng)絡(luò)爬蟲是在網(wǎng)絡(luò)爬蟲的基礎(chǔ)上設(shè)計(jì)的,可以按照用戶需求選擇性地對網(wǎng)頁信息進(jìn)行提取,極大地節(jié)省了資源[1-3]。因?yàn)榻ⅧB類聲音樣本庫和鳥鳴分類識別系統(tǒng)都需要大量的鳥類音頻數(shù)據(jù)作為支撐,通過對鳥類聲音爬取關(guān)鍵字信息的搜索,未能搜索到有關(guān)鳥類聲音爬取的程序或腳本。在考慮實(shí)際運(yùn)用的情況下,本文采用多線程、網(wǎng)絡(luò)爬蟲、翻譯等技術(shù)設(shè)計(jì)并實(shí)現(xiàn)了鳥類音頻數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)的建立有助于豐富鳥類聲音樣本庫,最終實(shí)現(xiàn)花費(fèi)較少資源能夠大量獲取關(guān)于鳥類音頻文件和鳥類信息的目標(biāo),解決了人工采集聲音效率低、投資大、風(fēng)險(xiǎn)高、質(zhì)量差,人工對鳥類音頻數(shù)據(jù)搜集、整理速度慢、耗費(fèi)時(shí)間長、工作內(nèi)容繁瑣等問題。
鳥類音頻數(shù)據(jù)采集系統(tǒng)的目標(biāo)是通過網(wǎng)絡(luò)爬蟲抓取互聯(lián)網(wǎng)上鳥類的音頻數(shù)據(jù),構(gòu)建豐富的鳥類聲音樣本庫。由于鳥類音頻數(shù)據(jù)的數(shù)據(jù)量比較大,本文在設(shè)計(jì)鳥類音頻數(shù)據(jù)采集系統(tǒng)的時(shí)候綜合考慮了相關(guān)因素,把采集系統(tǒng)建設(shè)分為兩個部分:一是數(shù)據(jù)抓取[4]部分,二是數(shù)據(jù)下載部分。該系統(tǒng)為了在硬件環(huán)境的支持下能夠最大限度地提升程序運(yùn)行速率設(shè)計(jì)了多線程控制器[5];為了解決獲取外文網(wǎng)站信息時(shí)使獲取的信息能夠符合中文的語義表達(dá)方式的問題設(shè)計(jì)了翻譯模塊[6],對提取的信息進(jìn)行翻譯處理。設(shè)計(jì)URL[7]管理器對URL進(jìn)行管理,HTML獲取器下載頁面,HTML解析器解析下載的頁面,存儲模塊[8]數(shù)據(jù)庫存儲資源,下載器下載相關(guān)內(nèi)容。
數(shù)據(jù)抓取部分在URL入口輸入進(jìn)入U(xiǎn)RL后開始工作,抓取到與該URL相關(guān)的網(wǎng)頁信息,解析提取所有URL和所需數(shù)據(jù),翻譯器對所需內(nèi)容進(jìn)行翻譯,最后把音頻數(shù)據(jù)的URL和相關(guān)信息提取保存到數(shù)據(jù)庫中。數(shù)據(jù)下載部分通過對數(shù)據(jù)庫信息的讀取,URL管理器處理后交給下載器進(jìn)行下載。
為了解決鳥類音頻文件的數(shù)據(jù)量較大,爬取頁面較多,爬取外文網(wǎng)站信息時(shí)不符合中文的語義表達(dá)方式等問題設(shè)計(jì)鳥類音頻數(shù)據(jù)采集系統(tǒng),其基本流程圖如圖1所示:
圖1 系統(tǒng)基本流程圖
本系統(tǒng)分為數(shù)據(jù)抓取部分和數(shù)據(jù)下載部分。數(shù)據(jù)抓取部分包括六個模塊:URL管理中心、HTML獲取器、HTML解析器、多線程控制器、HTML翻譯器和數(shù)據(jù)庫存儲,這六個模塊共同完成數(shù)據(jù)抓取并存儲于數(shù)據(jù)庫的整個過程。數(shù)據(jù)下載部分包括四個模塊:數(shù)據(jù)讀取、URL管理中心、多線程控制器、文件下載,這四個模塊完成數(shù)據(jù)下載到本地的整個進(jìn)程。
(1)URL管理中心
為了解決URL指向循環(huán)和URL重復(fù)等問題設(shè)立URL管理中心,URL管理中心的作用是管理待爬取的URL和已經(jīng)爬取過的URL,每個網(wǎng)頁爬取的信息都包含指向其他網(wǎng)頁的URL,其他網(wǎng)頁同樣會包含指向本網(wǎng)頁的URL。這樣URL的指向就存在循環(huán),嚴(yán)重影響網(wǎng)絡(luò)抓取數(shù)據(jù)的速度,當(dāng)兩個URL相互指向形成無限循環(huán),就會導(dǎo)致程序運(yùn)行出錯。設(shè)計(jì)URL管理中心能夠很好的解決這個問題,防止程序運(yùn)行出錯。
(2)HTML獲取器
HTML獲取器負(fù)責(zé)把網(wǎng)頁中對應(yīng)的信息下載到本地,這是整個爬蟲的核心部分。它從互聯(lián)網(wǎng)上查詢URL對應(yīng)的網(wǎng)頁,將其內(nèi)容按照HTML的格式下載到本地,便于后續(xù)分析處理。
(3)HTML解析器
HTML解析器對HTML獲取器下載的頁面進(jìn)行解析,提取出頁面中包含的URL和數(shù)據(jù)。本系統(tǒng)實(shí)現(xiàn)的是定向網(wǎng)絡(luò)爬蟲,除了提取頁面中待爬取的URL,還提取了很多實(shí)驗(yàn)所需數(shù)據(jù)。
(4)多線程控制器
為了解決程序運(yùn)行的速率問題,減少運(yùn)行時(shí)間,提高效率,本系統(tǒng)設(shè)計(jì)多線程控制器。多線程控制器的功能是對爬蟲程序的線程數(shù)加以控制,根據(jù)數(shù)據(jù)要求和系統(tǒng)性能對程序進(jìn)行控制,最大限度的提高程序運(yùn)行速率。
(5)翻譯
針對搜集外文網(wǎng)站數(shù)據(jù)時(shí)語言、語義不同且不符合中文的語言表達(dá)方式,分析理解這些數(shù)據(jù)困難等問題設(shè)計(jì)翻譯模塊。此模塊負(fù)責(zé)對HTML提取解析后的數(shù)據(jù)進(jìn)行翻譯、注解。在翻譯模塊中調(diào)用百度翻譯的API[9]實(shí)現(xiàn)對提取出來的內(nèi)容進(jìn)行翻譯,翻譯之后將數(shù)據(jù)提交到數(shù)據(jù)庫進(jìn)行存儲。
(6)數(shù)據(jù)庫存儲
為了存儲和讀取數(shù)據(jù)方便設(shè)計(jì)數(shù)據(jù)庫模塊,數(shù)據(jù)庫是根據(jù)實(shí)際需求設(shè)計(jì),能夠?qū)Ψg器提交過來的數(shù)據(jù)進(jìn)行存儲。
這部分實(shí)現(xiàn)的是對數(shù)據(jù)庫中數(shù)據(jù)的讀取與下載,讀取數(shù)據(jù)庫中保存的信息和URL,將讀取信息提交給URL管理中心對URL進(jìn)行管理,多線程控制器對下載程序進(jìn)行控制,音頻文件下載是為了實(shí)現(xiàn)對數(shù)據(jù)庫中的URL進(jìn)行訪問,下載鳥類音頻文件。
數(shù)據(jù)抓取部分流程如圖2所示,由流程圖可知在爬蟲程序中,URL管理器用來管理待爬取的URL列表和已經(jīng)爬取過的URL列表,從URL管理器中取出URL,判斷該URL是否被爬取過,如果是未爬取過的URL,則將此URL發(fā)送給HTML下載器。HTML下載器對該URL指定的網(wǎng)頁進(jìn)行下載存儲在本地服務(wù)器中,HTML解析器對下載器下載的頁面進(jìn)行解析,解析出網(wǎng)頁內(nèi)容和URL,解析器把URL提交給URL管理器,只要URL滿足程序運(yùn)行條件程序就一直運(yùn)行,對網(wǎng)頁進(jìn)行下載、解析、翻譯最后保存到數(shù)據(jù)庫,直到程序結(jié)束運(yùn)行。
圖2 數(shù)據(jù)抓取流程圖
數(shù)據(jù)下載流程如圖3所示,由數(shù)據(jù)下載的流程圖可知系統(tǒng)從數(shù)據(jù)庫中提取數(shù)據(jù),經(jīng)URL管理器處理之后,把URL傳遞給下載器直接訪問音頻數(shù)據(jù)的URL對鳥類音頻數(shù)據(jù)進(jìn)行下載,直到所有數(shù)據(jù)下載完成結(jié)束程序。
圖3 數(shù)據(jù)下載流程圖
為了提升程序運(yùn)行的速度,在串行網(wǎng)絡(luò)爬蟲的基礎(chǔ)上,設(shè)計(jì)多線程網(wǎng)絡(luò)爬蟲程序。爬蟲程序開始執(zhí)行后,程序向網(wǎng)頁發(fā)送訪問的請求,程序等待網(wǎng)頁做出響應(yīng)。根據(jù)等待的時(shí)間來衡量爬蟲的效率,等待的時(shí)間越長,效率就越低。當(dāng)程序采用多線程的時(shí)候,程序與網(wǎng)頁進(jìn)行通信等待的時(shí)間有所降低,提高了數(shù)據(jù)抓取的和數(shù)據(jù)下載的效率。
當(dāng)搜集目標(biāo)網(wǎng)站的數(shù)據(jù)信息的語言與系統(tǒng)所需信息的語言不一致時(shí),需要對爬蟲收集的數(shù)據(jù)進(jìn)行加工處理,使其符合中文的語義表達(dá)習(xí)慣,但人工對數(shù)據(jù)進(jìn)行整理,翻譯需要耗費(fèi)較多的人力、物力,增加實(shí)驗(yàn)任務(wù)。在網(wǎng)絡(luò)爬蟲程序中增加翻譯模塊可直接對網(wǎng)頁數(shù)據(jù)進(jìn)行翻譯,使其符合中文的語義表達(dá)方式、語義規(guī)則。翻譯模塊的實(shí)現(xiàn)是通過調(diào)用百度翻譯的API對數(shù)據(jù)進(jìn)行處理的,通過調(diào)用API編譯程序代碼實(shí)現(xiàn)翻譯功能,最終滿足于實(shí)際運(yùn)用的需求。
軟件測試環(huán)境如下:操作系統(tǒng):Windows 10家庭版;CPU:I5 4700M;內(nèi)存:8G;網(wǎng)絡(luò)帶寬:100Mb;應(yīng)用工具:Python 3.6。
在考慮了計(jì)算機(jī)的硬件配置和數(shù)據(jù)應(yīng)用的情況下,測試分為對國內(nèi)網(wǎng)站爬取和國外網(wǎng)站爬取進(jìn)行。
表1為爬取某國內(nèi)網(wǎng)站的實(shí)驗(yàn)數(shù)據(jù),表2是為下載某國內(nèi)網(wǎng)站的實(shí)驗(yàn)數(shù)據(jù)。
表1 某國內(nèi)網(wǎng)站數(shù)據(jù)爬取
表2 某國內(nèi)網(wǎng)站音頻文件下載
表3為爬取某國外網(wǎng)站的實(shí)驗(yàn)數(shù)據(jù),表4是為下載某國外網(wǎng)站的實(shí)驗(yàn)數(shù)據(jù)。
表3 某國外網(wǎng)站數(shù)據(jù)爬取
表4 某國外網(wǎng)站數(shù)據(jù)下載
本系統(tǒng)分別爬取國內(nèi)和國外網(wǎng)站數(shù)據(jù)進(jìn)行測試實(shí)驗(yàn),經(jīng)過系統(tǒng)爬取整理之后實(shí)驗(yàn)數(shù)據(jù)滿足具體應(yīng)用需求。實(shí)驗(yàn)中耗費(fèi)較少的時(shí)間資源能夠爬取到大量的信息,多線程爬取和下載都速率都比較快,耗費(fèi)資源少。人工對實(shí)驗(yàn)結(jié)果進(jìn)行查看,發(fā)現(xiàn)爬取外文網(wǎng)站的信息符合中文的表達(dá)規(guī)范和語義要求,綜合來看本次實(shí)驗(yàn)結(jié)果滿足系統(tǒng)建立的需求。實(shí)驗(yàn)研究發(fā)現(xiàn)當(dāng)線程數(shù)達(dá)到一定程度時(shí)數(shù)據(jù)的下載速度與網(wǎng)絡(luò)帶寬有關(guān),受網(wǎng)絡(luò)帶寬[1]的影響。當(dāng)線程數(shù)達(dá)到200,下載速度通過360測速工具測試知道速度為8000KB/s,接近當(dāng)前帶寬的最大速率。在調(diào)用不用翻譯工具對數(shù)據(jù)進(jìn)行翻譯的對比實(shí)驗(yàn)中,我們發(fā)現(xiàn)很多專業(yè)名詞的解釋更加符合中文語言規(guī)則的是百度翻譯工具。
鳥類聲音樣本庫的豐富度決定鳥鳴分類識別系統(tǒng)的識別效果,基于多線程翻譯網(wǎng)絡(luò)爬蟲的鳥類音頻數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)解決了在萬維網(wǎng)上獲取鳥類音頻文件,鳥類知識信息等問題,豐富了鳥類聲音樣本庫。本系統(tǒng)的建立,能夠便捷高效地獲取鳥類音頻數(shù)據(jù),滿足具體應(yīng)用需求,解決了人工采集聲音效率低、投資大、風(fēng)險(xiǎn)高、質(zhì)量差,人工對鳥類音頻數(shù)據(jù)搜集、整理速度慢、耗費(fèi)時(shí)間長、工作內(nèi)容繁瑣;人工處理翻譯外文數(shù)據(jù)效率低、耗費(fèi)資源多等問題。