方子菱 匡芳君*
(溫州商學(xué)院信息工程學(xué)院, 浙江 溫州 325035)
在互聯(lián)網(wǎng)信息時(shí)代,人們對(duì)于信息的搜集越發(fā)高要求化。大家都希望能通過越來越短的時(shí)間去盡可能地搜集到更全面更清晰的數(shù)據(jù)信息,以便為后期數(shù)據(jù)分析提供高質(zhì)量的基礎(chǔ)數(shù)據(jù),從而應(yīng)對(duì)市場(chǎng)客戶的需求和市場(chǎng)行情的飛速變化?;赑ython的數(shù)據(jù)爬蟲技術(shù)是目前使用認(rèn)知度最高的方法之一,它能夠以最快捷的方式最全面地反饋出一個(gè)網(wǎng)站或是APP等的用戶體驗(yàn)數(shù)據(jù),達(dá)到數(shù)據(jù)收集者的可閱讀要求。獲取數(shù)據(jù)的背后自然離不開一個(gè)強(qiáng)大的開發(fā)庫(kù),而Python擁有的標(biāo)準(zhǔn)庫(kù),提供了系統(tǒng)管理、網(wǎng)絡(luò)通信、文本處理、數(shù)據(jù)庫(kù)接口、圖形系統(tǒng)、XML處理等額外的功能。同時(shí)Python社區(qū)提供了大量的第三方模塊,使用方式與標(biāo)準(zhǔn)庫(kù)類似。它們的功能覆蓋科學(xué)計(jì)算、Web開發(fā)、數(shù)據(jù)庫(kù)接口、圖形系統(tǒng)等多個(gè)領(lǐng)域,并且大多成熟而穩(wěn)定。基于這些條件和技術(shù),使用者便可以輕松地洞察市場(chǎng)的發(fā)展行情,及時(shí)做出調(diào)整,彌補(bǔ)不足,最高效地達(dá)到客戶需求,同時(shí)也方便個(gè)人信息統(tǒng)計(jì)和數(shù)據(jù)分析。為了能直觀地展示民謠歌手的情緒、歌詞詞頻統(tǒng)計(jì)以及歌手對(duì)時(shí)光和城市的偏愛程度,本文利用Python語(yǔ)言的大數(shù)據(jù)收集和分析能力,通過分析網(wǎng)易云民謠top10歌手的作品來探索歌手所感受到的社會(huì)信息。
Python是一種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,源代碼和解釋器CPython遵循GPL協(xié)議。作為實(shí)用開發(fā)一般使用Python快速生成程序的原型,然后對(duì)其中有特別要求的部分,再用更合適的語(yǔ)言改寫,比如3D游戲中的圖形渲染模塊,性能要求特別高,就可以用C/C++重寫,而后封裝為Python可以調(diào)用的擴(kuò)展類庫(kù)[1]。Python語(yǔ)言中強(qiáng)大的庫(kù)讓其可以處理各種工作[2],包括正則表達(dá)式、文檔生成、單元測(cè)試、線程、數(shù)據(jù)庫(kù)、網(wǎng)頁(yè)瀏覽器、CGI、FTP、電子郵件、XML、HTML、WAV文件和其他與系統(tǒng)有關(guān)的操作。它有多種編程方式,如利用系統(tǒng)編程提供API,能方便進(jìn)行系統(tǒng)維護(hù)和管理;也能利用數(shù)據(jù)庫(kù)編程,使程序員通過遵循Python DB-API規(guī)范 的 模 塊 與 Microsoft SQL Server、Oracle,Sybase,DB2,MySQL、SQLite等數(shù)據(jù)庫(kù)通信。因此,本文主要利用Python語(yǔ)言Beautiful Soup API接口和Snow NLP、jieba等類庫(kù)對(duì)文段歌詞中的內(nèi)容進(jìn)行詞性標(biāo)注、分詞、重點(diǎn)摘取,以獲得所需數(shù)據(jù)集,從而對(duì)網(wǎng)易民謠歌詞進(jìn)行數(shù)據(jù)分析。
信息化的數(shù)據(jù)來源多樣化,包括站內(nèi)的統(tǒng)計(jì)工具、搜索引擎搜索結(jié)果、行業(yè)大數(shù)據(jù)、運(yùn)營(yíng)數(shù)據(jù)以及使用最頻繁的web日志數(shù)據(jù),而這些數(shù)據(jù)卻以各種格式數(shù)據(jù)文件呈現(xiàn),需要利用Python爬蟲技術(shù)將搜索引擎數(shù)據(jù)、應(yīng)用APP和網(wǎng)頁(yè)中的html文檔之間的鏈接關(guān)系進(jìn)行關(guān)聯(lián)和采集[3],從而獲取現(xiàn)有數(shù)據(jù),或者是通過網(wǎng)站的編程接口(API)進(jìn)行數(shù)據(jù)的抓取和收集。
爬蟲是指向網(wǎng)站發(fā)起請(qǐng)求,獲取資源后分析并提取有用數(shù)據(jù)的程序;從技術(shù)層面來說就是通過程序模擬瀏覽器請(qǐng)求站點(diǎn)的行為,把站點(diǎn)返回的HTML代碼/JSON數(shù)據(jù)/二進(jìn)制數(shù)據(jù)(圖片、視頻)爬到本地,進(jìn)而提取自己需要的數(shù)據(jù),存放起來使用[4,5],數(shù)據(jù)爬取步驟如圖1所示。由于本文主要是獲取網(wǎng)易云音樂民謠的所有歌曲,因此網(wǎng)易民謠歌詞數(shù)據(jù)獲取流程圖如圖2所示。
圖1 數(shù)據(jù)爬取步驟
圖2 網(wǎng)易民謠歌詞數(shù)據(jù)獲取流程圖
(1)目標(biāo)確定和分析
網(wǎng)易歌曲鏈接地址為:https://music.163.com/discover/playlist/?cat=%E6%B0%91%E8%B0%A3&order=hot,在此鏈接地址Response中可以看到源代碼以及頁(yè)面的具體信息,通過在Headers里可以看到request URL,從而利用URL的地址鏈接進(jìn)行接下來的信息采集。
圖3 數(shù)據(jù)源代碼
(2)編寫python爬蟲代碼
首先在下載網(wǎng)頁(yè)內(nèi)容前,需要進(jìn)行download代碼封裝,進(jìn)而對(duì)下載的信息有了安全性和隱蔽性的保障,限制了一定的訪問者,必要地要通過接口才可進(jìn)行訪問,關(guān)鍵代碼如下:
繼而在解析網(wǎng)頁(yè)內(nèi)容時(shí),需要使用第三方插件Beautiful Soup API,關(guān)鍵代碼如下:
(3)執(zhí)行爬蟲
整個(gè)爬蟲爬取信息的重點(diǎn)即是通過get_music()方法獲取top10的歌手以及歌詞內(nèi)容并保存到TXT文件中,關(guān)鍵代碼如下:
通過執(zhí)行爬蟲代碼爬取網(wǎng)址鏈接到的網(wǎng)頁(yè)內(nèi)容,并保存到設(shè)置途徑的集合中去,最終整理匯總后的數(shù)據(jù)集如圖4所示。
圖4 獲取的數(shù)據(jù)集
本節(jié)運(yùn)用Python類庫(kù)(SnowNLP)對(duì)民謠top10歌手的歌詞文本進(jìn)行情緒分析,關(guān)鍵代碼如下:
運(yùn)用SnowNLP后對(duì)top10民謠歌手的歌詞進(jìn)行情感分析,得到的民謠歌手情緒統(tǒng)計(jì)圖如圖5所示。從圖5可以看出,近期的民謠歌手們情緒都比較高漲,似乎都在通過歌詞里的詞頻向大家展示他們所感受到的社會(huì)信息。
圖5 民謠歌手情緒統(tǒng)計(jì)圖
為了讓數(shù)據(jù)分析出來更加直觀清晰,首先運(yùn)用jieba庫(kù)進(jìn)行分詞和詞頻統(tǒng)計(jì)分析,得到歌詞中詞頻統(tǒng)計(jì)信息,歌詞詞頻統(tǒng)計(jì)關(guān)鍵代碼如下:
然后,通過詞頻統(tǒng)計(jì)后將數(shù)據(jù)導(dǎo)入到Excel表格中,統(tǒng)計(jì)結(jié)果如圖6所示。
圖6 詞頻數(shù)據(jù)統(tǒng)計(jì)圖
最后,利用詞云的可視化功能將歌詞詞頻以更具視覺效果方式展示,如圖7所示。
圖7 詞云可視圖
通過詞頻的統(tǒng)計(jì)和分析,可以發(fā)現(xiàn)這些民謠歌手會(huì)因?yàn)樯钪械囊幌盗凶兓?而改變他們的曲調(diào)辭藻;常常提及時(shí)光、南方、家、背離,他們用歌曲表達(dá)情感,而這里運(yùn)用數(shù)據(jù)精確分析報(bào)告歌手們的情感,使他們的表達(dá)更加直接集中。為了能夠讓讀者更進(jìn)一步地體會(huì)這些民謠歌者的內(nèi)心與喜好,又通過詞頻分析他們到底是偏愛什么時(shí)光以及城市,得到民謠歌手偏愛的時(shí)光和喜愛的城市統(tǒng)計(jì)圖,如圖8和圖9所示。
從圖8時(shí)光數(shù)據(jù)分析圖可以看出,民謠歌者們更喜愛今天,喜歡當(dāng)下能把握的時(shí)光與生活,珍惜眼前。從圖9喜愛的城市分析圖可以看出,如今最熱門、最招人喜愛的城市莫過于北京和成都兩地。
圖8 民謠歌手偏愛的時(shí)光
圖9 民謠歌手喜愛的城市
本文利用Python語(yǔ)言和數(shù)據(jù)分析技術(shù)對(duì)網(wǎng)易民謠歌詞進(jìn)行數(shù)據(jù)分析,首先通過使用基于Python的爬蟲技術(shù)獲取網(wǎng)易民謠歌詞相關(guān)信息,然后利用Python類庫(kù)SnowNLP和jieba以及詞云可視化對(duì)網(wǎng)易民謠歌詞挖掘有價(jià)值的信息并進(jìn)行可視化展示。下一步工作將重點(diǎn)針對(duì)流動(dòng)性的動(dòng)態(tài)數(shù)據(jù)爬取,考慮數(shù)據(jù)獲取的質(zhì)量和安全性,以及如何在短時(shí)間獲取單個(gè)客戶端動(dòng)態(tài)使用數(shù)據(jù),并保證數(shù)據(jù)真實(shí)、安全、可靠。
[1]夏火松,李保國(guó).基于Python的動(dòng)態(tài)網(wǎng)頁(yè)評(píng)價(jià)爬蟲算法[J].軟件工程,2016,19(2):43-46.
[2]周中華,張惠然,謝江.基于Python的新浪微博數(shù)據(jù)爬蟲[J]. 計(jì)算機(jī)應(yīng)用,2014,34(11):3131-3134.
[3]陳琳,任芳.基于Python的新浪微博數(shù)據(jù)爬蟲程序設(shè)計(jì)[J].信息系統(tǒng)工程,2016(9):97-99.
[4]郭麗蓉.基于Python的網(wǎng)絡(luò)爬蟲程序設(shè)計(jì)[J].電子技術(shù)與軟件工程,2017(23):248-249.
[5]熊暢.基于Python爬蟲技術(shù)的網(wǎng)頁(yè)數(shù)據(jù)抓取與分析研究[J].數(shù)字技術(shù)與應(yīng)用,2017(9):35-36.
[6]嚴(yán)婷,文欣秀,趙嘉豪,等.基于Python的可視化數(shù)據(jù)分析平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)時(shí)代,2017,(12):54-56.