基于Python的網(wǎng)易云音樂數(shù)據(jù)采集與分析_第1頁
基于Python的網(wǎng)易云音樂數(shù)據(jù)采集與分析_第2頁
基于Python的網(wǎng)易云音樂數(shù)據(jù)采集與分析_第3頁
基于Python的網(wǎng)易云音樂數(shù)據(jù)采集與分析_第4頁
基于Python的網(wǎng)易云音樂數(shù)據(jù)采集與分析_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

目錄

1引言1

1.1項目背景1

1.2開發(fā)環(huán)境與工具1

1.2.1Python簡介1

1.2.2Pycharm簡介2

1.2.3Jupyternotebook簡介3

2需求分析3

2.1可行性需求分析3

2.2采集目標功能分析4

2.3關(guān)鍵技術(shù)分析5

2.3.1網(wǎng)絡(luò)爬蟲技術(shù)5

2.3.2文件存取技術(shù)6

2.3.3可視化技術(shù)6

3數(shù)據(jù)采集7

3.1采集頁面分析7

3.2字段分析8

3.3編程實現(xiàn)9

4數(shù)據(jù)清洗與處理16

4.1數(shù)據(jù)清洗16

4.2數(shù)據(jù)儲存17

4.3編程實現(xiàn)17

5數(shù)據(jù)統(tǒng)計與分析18

5.1數(shù)據(jù)準備18

5.2數(shù)據(jù)展示19

5.2.1依據(jù)歌手進行統(tǒng)計19

5.2.2依據(jù)歌曲評分進行統(tǒng)計20

5.2.3根據(jù)歌手上榜單曲數(shù)進行統(tǒng)計和分析21

I

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

5.3綜述22

6小結(jié)22

參考資料1

II

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

基于Python的網(wǎng)易云音樂數(shù)據(jù)采集與分析

1引言

隨著互聯(lián)網(wǎng)和數(shù)字化技術(shù)的快速發(fā)展,現(xiàn)在可以方便地在音樂網(wǎng)站或應(yīng)用

中找到各種類型的音樂,而音樂排行榜通常是反映最新、最受歡迎的音樂作品

的較好的方式之一。

音樂作為文化藝術(shù)的重要形式之一,也越來越受到人們的關(guān)注與喜愛。網(wǎng)

易云音樂是國內(nèi)最大的在線音樂平臺之一,擁有龐大的音樂庫和活躍的用戶群

體。通過對網(wǎng)易云音樂的數(shù)據(jù)采集和分析,可以深入了解用戶的音樂口味和偏

好,為音樂制作、推廣和推薦提供參考和依據(jù)。

因此,爬取音樂排行榜數(shù)據(jù)成為了一項重要的任務(wù),可以幫助人們更好地

了解當前的音樂趨勢和市場情況。

1.1項目背景

網(wǎng)易云音樂是一個國內(nèi)最大且非常流行的在線音樂平臺,擁有大量的用戶

和音樂資源。本畢業(yè)設(shè)計旨在利用網(wǎng)易云音樂的數(shù)據(jù)來進行爬取分析、數(shù)據(jù)處

理和數(shù)據(jù)可視化,從而了解用戶偏好、歌曲熱度和評論情感等方面的信息。

本畢業(yè)設(shè)計將介紹如何通過Python收集網(wǎng)易云音樂的數(shù)據(jù),包括歌曲信息、

藝人信息、用戶信息等,以及如何對這些數(shù)據(jù)進行可視化分析。將用到Python

中的webscraping庫BeautifulSoup、數(shù)據(jù)處理庫Pandas和數(shù)據(jù)可視化庫

Matplotlib,讓大家了解在實際應(yīng)用中如何運用Python進行數(shù)據(jù)采集和分析。

需要注意的是,本畢業(yè)設(shè)計所涉及到的數(shù)據(jù)采集僅作為學習和研究用途,

禁止商業(yè)使用和違反網(wǎng)易云音樂相關(guān)規(guī)定。

1.2開發(fā)環(huán)境與工具

1.2.1Python簡介

Python是一種高級編程語言,被廣泛應(yīng)用于數(shù)據(jù)科學、人工智能、網(wǎng)絡(luò)開

發(fā)、自動化測試等領(lǐng)域。Python語言簡潔易懂、易于學習,同時擁有一個廣泛

的第三方庫,可以極大地提高工作效率。

對于網(wǎng)易云音樂排行榜的數(shù)據(jù)采集分析與可視化展示,Python可以作為一

個非常有用的工具。Python庫BeautifulSoup和requests可以用于網(wǎng)頁數(shù)據(jù)

1

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

的爬取,Pandas可以進行數(shù)據(jù)清洗和整理,Matplotlib和Seaborn可以用于

數(shù)據(jù)可視化以及更豐富的圖表展示。此外,Python還有其他許多強大的庫和工

具,可以根據(jù)具體需求進行選擇和應(yīng)用。

總之,Python的易用性和廣泛的應(yīng)用場景,使它成為數(shù)據(jù)科學和數(shù)據(jù)分析

領(lǐng)域的首選工具之一。在網(wǎng)易云音樂排行榜數(shù)據(jù)采集分析與可視化展示中使用

Python,可以極大地提高工作效率和數(shù)據(jù)的分析展示效果。

1.2.2Pycharm簡介

Pycharm是一款流行的Python集成開發(fā)環(huán)境,它提供了許多實用的工具和

功能,幫助開發(fā)者輕松、高效地編寫Python代碼。而在Python開發(fā)中,爬蟲

是一個十分常見的應(yīng)用場景。

接下來將會介紹如何使用Pycharm與Python的相關(guān)庫進行爬取網(wǎng)易云音

樂排行榜數(shù)據(jù)的工作。這充分體現(xiàn)了Pycharm所提供的強大功能,幫助更加高

效地完成開發(fā)任務(wù)。

所使用的爬蟲工具包括requests庫和BeautifulSoup庫,其中requests

庫可用于獲取網(wǎng)頁HTML源碼,BeautifulSoup庫則可以方便地解析HTML源碼。

再之后,使用txt文件存儲技術(shù)存儲爬取的網(wǎng)易云歌曲排行榜數(shù)據(jù)。

而Pycharm非常適合這種開發(fā)情景,它不僅提供了方便的Python解釋器環(huán)

境,更是支持Python解釋器的自由切換及擴展。下面重點介紹如何使用Pycharm

和Python相關(guān)的庫來實現(xiàn)爬取音樂排行榜數(shù)據(jù)。

首先要使用Pycharm,需要安裝Pycharm。下載安裝后,打開Pycharm并創(chuàng)

建新的Python畢業(yè)設(shè)計。在畢業(yè)設(shè)計中,添加需要用到的Python庫,如

requests、BeautifulSoup等庫。

接下來,使用requests庫獲取音樂排行榜頁面的HTML源碼,然后使用

BeautifulSoup庫解析獲取到的HTML代碼,從而得到需要的音樂排行榜數(shù)據(jù)。

在Pycharm中打開Python畢業(yè)設(shè)計,使用相關(guān)代碼獲取HTML源碼。

再使用BeautifulSoup庫解析HTML代碼,獲取需要的網(wǎng)易云音樂排行榜數(shù)

據(jù)。經(jīng)獲取了音樂排行榜數(shù)據(jù)后可以使用txt文件將這些排行榜數(shù)據(jù)存儲到數(shù)

據(jù)庫中。

以上就是使用Pycharm和相關(guān)的Python庫來實現(xiàn)爬取音樂排行榜數(shù)據(jù)的

完整過程。通過Pycharm提供的強大功能,可以很容易地完成這項工作,并且

可以快速分析和處理數(shù)據(jù),從而幫助人們更好地了解音樂市場的趨勢和變化。

2

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

綜上所述,Pycharm和Python相關(guān)的庫可以更加快速、簡便地實現(xiàn)爬取音

樂排行榜數(shù)據(jù)的功能,而爬蟲這個應(yīng)有場景也驗證了Pycharm的開發(fā)優(yōu)勢。通

過這種方式,可以更好地理解和分析音樂市場的數(shù)據(jù),為決策提供有力支持,

同時也能夠為的日常生活和學術(shù)研究帶來更多的便利。

1.2.3Jupyternotebook簡介

JupyterNotebook,原名IPythonNotbook,是IPython的加強網(wǎng)頁版,一

個開源Web應(yīng)用程序。

使用JupyterNotebook主要針對網(wǎng)易云音樂的熱門歌曲排行榜數(shù)據(jù)進行了

采集、分析和展示。主要內(nèi)容包括以下幾個部分:

數(shù)據(jù)采集:使用Python的requests和BeautifulSoup庫爬取網(wǎng)易云音樂

的排行榜頁面,獲取各個歌曲的相關(guān)信息,包括歌曲名稱、歌手、專輯、封面、

播放鏈接、評論數(shù)等。

數(shù)據(jù)處理:對采集到的數(shù)據(jù)進行清洗、格式化和計算,例如刪除重復的歌

曲,將播放數(shù)和評論數(shù)數(shù)值化,以便后續(xù)分析。

數(shù)據(jù)分析:通過matplotlib和seaborn庫進行數(shù)據(jù)可視化,分析網(wǎng)易云音

樂熱門歌曲的各種特征,例如歌曲類型分布、歌手和專輯的熱門程度、歌曲播

放量和評論數(shù)的關(guān)系等。

結(jié)論和展示:在分析的基礎(chǔ)上提出一些結(jié)論和發(fā)現(xiàn),并通過可視化展示呈

現(xiàn)出來。

通過本JupyterNotebook的學習,讀者可以了解如何使用Python爬蟲爬取

網(wǎng)頁數(shù)據(jù),如何使用matplotlib和seaborn庫進行數(shù)據(jù)可視化,以及如何利用

這些技能進行數(shù)據(jù)分析和展示,從而更好地理解網(wǎng)易云音樂熱門歌曲的特點和

趨勢。

2需求分析

2.1可行性需求分析

(1).技術(shù)可行性

網(wǎng)易云音樂排行榜數(shù)據(jù)的采集相對容易實現(xiàn),可以通過爬蟲技術(shù)實現(xiàn),只

需要獲取到網(wǎng)易云音樂排行榜的網(wǎng)址,然后模擬瀏覽器進行訪問并解析出其中

的數(shù)據(jù)即可。但需要注意的是,網(wǎng)易云音樂官方網(wǎng)站可能會對爬蟲進行反爬蟲

處理,需要采取一定的反反爬蟲措施。

3

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

采集到的數(shù)據(jù)可以進行分析和可視化展示。對于分析可以結(jié)合機器學習算

法,例如使用分類算法對不同類型的音樂進行分類。對于可視化展示,可以使

用各種圖表、儀表盤等方式展示不同類型的音樂排行榜、用戶喜好分布等信息,

從而為音樂愛好者提供更好的用戶體驗。

以上為此次畢業(yè)設(shè)計的技術(shù)可行性,也將在后續(xù)的工作中將所有的步驟實

現(xiàn)到位,保證數(shù)據(jù)的準確性和安全性。

(2).項目可行性

該畢業(yè)設(shè)計的可行性較高,采集網(wǎng)易云音樂排行榜數(shù)據(jù)可以通過模擬用戶

登陸、爬蟲等方式實現(xiàn)。其中,模擬用戶登陸的方式較為安全,可以避免被網(wǎng)

站封禁。數(shù)據(jù)采集后,可以使用數(shù)據(jù)分析和可視化工具進行數(shù)據(jù)處理和展示,

例如Python的Pandas和Matplotlib庫、Tableau等工具。

此外,網(wǎng)易云音樂排行榜數(shù)據(jù)一直備受關(guān)注,對于歌曲排行、歌曲趨勢等

方面的分析和展示也具有一定的市場需求和商業(yè)價值。

需要注意的是,在該畢業(yè)設(shè)計中需要遵循相關(guān)法律法規(guī),避免侵犯他人權(quán)

益。

2.2采集目標功能分析

本次畢業(yè)設(shè)計的數(shù)據(jù)集的來源是網(wǎng)易云音樂網(wǎng)站,是通過python爬取網(wǎng)易

云音樂歌曲的原創(chuàng)榜、新歌榜、熱歌榜、飆升榜、網(wǎng)易云音樂用戶評論數(shù)從而

了解用戶偏好、歌曲熱度和評論情感等方面的信息。數(shù)據(jù)清洗后共4333條記錄,

爬取完成后盡可能的檢查數(shù)據(jù)的準確性,確定爬取出來的數(shù)據(jù)無誤并且是屬于

網(wǎng)易云音樂網(wǎng)站實時存在的信息。

為了對網(wǎng)易云音樂的排行榜進行數(shù)據(jù)采集、分析和可視化展示,可以列出

以下目標功能分析:

數(shù)據(jù)采集:通過網(wǎng)易云音樂的開放API接口,獲取實時的音樂排行榜數(shù)據(jù),

包括歌曲名、歌手名、播放量、收藏數(shù)、評論數(shù)等信息。同時,也可以從其他

公開的數(shù)據(jù)源中獲取相關(guān)的音樂數(shù)據(jù),例如音樂的歌詞、專輯封面等信息。

數(shù)據(jù)清洗和預處理:將采集到的數(shù)據(jù)進行清洗和預處理,包括去重、去除

異常值、格式化數(shù)據(jù)等操作。同時,也可以進行一些數(shù)據(jù)挖掘和特征工程,提

取有用的特征,并將數(shù)據(jù)轉(zhuǎn)化為適合分析和可視化的格式

數(shù)據(jù)分析和統(tǒng)計:對采集到的音樂排行榜數(shù)據(jù)進行分析和統(tǒng)計,包括各個

榜單的排名變化、歌曲的播放量趨勢、歌手的熱度排名等。同時,也可以進行

4

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

一些數(shù)據(jù)挖掘和機器學習算法,例如聚類分析、關(guān)聯(lián)規(guī)則挖掘等,來發(fā)現(xiàn)數(shù)據(jù)

中隱藏的規(guī)律和趨勢。

可視化展示:將分析和統(tǒng)計的結(jié)果以圖表、表格、地圖等形式進行可視化

展示,使數(shù)據(jù)更加直觀和易于理解。同時,也可以進行交互式可視化,例如動

態(tài)圖表、可拖拽的過濾器等,提供更加靈活和個性化的數(shù)據(jù)展示方式。

實時更新和監(jiān)控:對采集到的音樂排行榜數(shù)據(jù)進行實時更新和監(jiān)控,及時

發(fā)現(xiàn)榜單的變化和趨勢,并及時調(diào)整分析和展示策略。同時,也可以進行一些

異常檢測和預警,例如歌曲的異常上升或下降,歌手的突然爆發(fā)等,提前發(fā)現(xiàn)

并及時處理。

2.3關(guān)鍵技術(shù)分析

2.3.1網(wǎng)絡(luò)爬蟲技術(shù)

在日常生活中瀏覽網(wǎng)頁通常都會遇到需要緩存在本地的數(shù)據(jù),當數(shù)量量比

較小的時候可以自己采取手動下載的方式去獲得想要的數(shù)據(jù),不過在的大數(shù)據(jù)

領(lǐng)域一般用到的數(shù)據(jù)體量都是幾個G甚至幾個T的單位,這個時候采取手動下

載獲取數(shù)據(jù)無疑是一個很愚蠢的方式,所以會采取網(wǎng)絡(luò)爬蟲的手段自動化的獲

取數(shù)據(jù)。

網(wǎng)絡(luò)爬蟲也被人們叫做網(wǎng)絡(luò)機器人,顧名思義就是讓人們不用自己動手操

作,只需要編寫程序或者一些小腳本用來自動的瀏覽龐大的互聯(lián)網(wǎng),并且對想要

的目標網(wǎng)頁去進行精準的數(shù)據(jù)的采集。當下常見的一些網(wǎng)絡(luò)爬蟲按照實現(xiàn)的原

理和技術(shù)結(jié)構(gòu)一般可以分為:通用網(wǎng)絡(luò)爬蟲、聚焦網(wǎng)絡(luò)爬蟲、增量式網(wǎng)絡(luò)爬蟲、

深層網(wǎng)絡(luò)爬蟲等一些類型。

在大家的印象中常常將普通的網(wǎng)絡(luò)爬蟲與黑客混為一談,其實二者之間有

很大的區(qū)別。黑客屬于違反法律肆意竊取個人或者組織內(nèi)有價值的信息以此獲

利,而爬蟲僅僅知識用來代替重復無意義的動作,在合法合理的范圍內(nèi)去獲得自

己想要的信息,在一定程度上網(wǎng)絡(luò)爬蟲和普通用戶瀏覽網(wǎng)頁是沒有本質(zhì)區(qū)別的,

但是爬蟲確實可以作為一種攻擊的手段。在編寫網(wǎng)絡(luò)爬蟲的腳本時沒有設(shè)置一

定的睡眠緩沖時間,通過極高的頻率反復訪問客戶端網(wǎng)站會讓服務(wù)器持續(xù)在高

強度環(huán)境下工作,對服務(wù)器造成一定的壓力,如果一時間處理不過來服務(wù)器往往

會自動關(guān)機,也就是宕機,這也是常見的DDOS攻擊。

由此可見,網(wǎng)絡(luò)爬蟲技術(shù)在應(yīng)用場景的不同它發(fā)揮的作用也是不同的。在好

的場景下可以幫完成搶購、投票、報名、搶購等操作。但是在壞的場景下同樣

5

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

也能一直發(fā)送騷擾信息,給他人帶來困擾。爬蟲技術(shù)是一把雙刃劍,一個不小心

可能就會傷害到自己和他人,所以技術(shù)人員要懂法、守法。在法律允許的范疇內(nèi)

去編寫自己的腳本程序,不要一不小心半只腳踏進犯罪的深淵。

有爬蟲技術(shù),那也一定存在反爬取的技術(shù)了。高級的爬蟲都會涉及到反爬蟲

的概念,往往能夠繞過或者突破人家的防守機制從而獲取到自己想到要的數(shù)據(jù)

時,就代表爬蟲工程師的個人水平已經(jīng)很不錯了。常見的反爬機制有IP、JS加

密、css反爬、或者Ajax異步、驗證碼等等手段。這些手段會加大爬蟲工程師

的工作量,也會加大網(wǎng)站的開發(fā)成本。所以像一般的小網(wǎng)站最多設(shè)置一個小反爬,

對于獲取數(shù)據(jù)而言也相對容易。也不用去考慮成本的問題。

2.3.2文件存取技術(shù)

爬取音樂排行榜和txt文件技術(shù)的聯(lián)系在于數(shù)據(jù)的存儲和處理,爬取音樂

排行榜需要對互聯(lián)網(wǎng)上的大量數(shù)據(jù)進行抓取,收集后其數(shù)據(jù)可以選擇存儲在txt

文件中。

txt文件作為一種文本文件,是最為簡單的文件格式之一,易于存儲、傳輸

和處理。一旦抓取的音樂排行榜數(shù)據(jù)保存在txt文件中,數(shù)據(jù)處理變得更容易。

txt文件技術(shù)不僅僅是一種簡單地存儲和傳輸數(shù)據(jù)的方式,同時也可以作為一個

簡單的數(shù)據(jù)處理工具。通過使用Python等編程語言,可以使用txt文件技術(shù)讀

取并處理排行榜數(shù)據(jù),應(yīng)用有關(guān)算法和模型,生成合適的數(shù)據(jù)圖表或統(tǒng)計數(shù)據(jù)。

這些數(shù)據(jù)可以用來分析音樂排行榜的趨勢和規(guī)律,幫助開發(fā)者了解音樂行業(yè)并

進行趨勢分析,或是廣告行業(yè)進行市場營銷。

txt文件技術(shù)對于數(shù)據(jù)共享和傳輸也非常簡便。透過互聯(lián)網(wǎng)或是內(nèi)部網(wǎng)絡(luò)資

源,可以通過txt文件共享和傳輸數(shù)據(jù)。

總而言之,txt文件技術(shù)是一種應(yīng)用廣泛的文本文件格式,可以用于數(shù)據(jù)的

存儲、傳輸和處理。對于音樂排行榜數(shù)據(jù)的抓取和處理,txt文件技術(shù)與爬蟲技

術(shù)配合使用,可實現(xiàn)便捷的數(shù)據(jù)處理和共享。通過txt文件技術(shù),可以在大量

數(shù)據(jù)中快速找到需要的音樂排行榜數(shù)據(jù),并方便地進行數(shù)據(jù)處理和分析。

2.3.3可視化技術(shù)

爬取下來的數(shù)據(jù)通過預處理、保存為csv文件格式。該數(shù)據(jù)集能否一眼就

得到想要的結(jié)論呢?答案是否定的!

需要一種技術(shù),根據(jù)獲取到的龐大數(shù)據(jù)將其通過統(tǒng)計學圖形的方式展現(xiàn)在

眼前,讓對其結(jié)果一目了然。這個就是數(shù)據(jù)可視化技術(shù)。

6

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

顯然獲取到的數(shù)據(jù)是一串串冗長的字符串,上面寫的一條條信息或許能夠

看懂讀懂,但是當它成千上萬的時候短時間內(nèi)很難看出端倪和破綻,需要進行深

入的了解和分析。對這一坨枯燥而乏味的數(shù)據(jù)集進行處理完畢后,就要導入需要

的第三方庫將數(shù)據(jù)合理的進行判斷,決定使用什么樣的幾何圖形才能最好、并且

直觀的表達出數(shù)據(jù)集的信息。

多年來可視化的技術(shù)也逐漸發(fā)展成為了一下三類:科學可視化、信息可視

化、可視化分析。而這里用到的就是信息可視化,信息可視化的處理對象是非結(jié)

構(gòu)化、非幾何的抽象數(shù)據(jù),如金融交易、社交網(wǎng)絡(luò)和文本數(shù)據(jù),其核心挑戰(zhàn)是針

對大尺度高維復雜數(shù)據(jù)如何減少視覺混淆對信息的干擾。

本次畢業(yè)使用python第三方庫matpoltlab去進行可視化,matplotlab中

包含了許多庫,分別對應(yīng)餅圖、條形圖、直方圖、折線圖等圖形,可以很好的將

數(shù)據(jù)高效率的表現(xiàn)出來,可視化圖形呈現(xiàn)出來后對于結(jié)果自然一目了然,然后得

出結(jié)論。

3數(shù)據(jù)采集

3.1采集頁面分析

首先通過谷歌瀏覽器搜索網(wǎng)易云音樂的官方網(wǎng)頁,然后找到排行榜目錄集

頁面觀察圖3-1,其中URL為:。

圖3-1數(shù)據(jù)網(wǎng)址頁面圖

按F12調(diào)出開發(fā)者工具,刷新頁面,如圖3-2。

7

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

圖3-2開發(fā)者工具圖

利用全局搜索工具定位所需數(shù)據(jù)位置,點擊開發(fā)者工具上面的Headers字

段,分析這是個什么請求,發(fā)現(xiàn)這個是一個POST請求,那需要尋找它的from

data往下翻找,在最后找到了表單數(shù)據(jù)FormData,如圖3-3。

圖3-3FormData圖

3.2字段分析

首先來到網(wǎng)頁面打開網(wǎng)頁的選擇欄,然后將選擇欄目定位到歌曲信息集中

的位置也就是定位到所需要的數(shù)據(jù)所在的位置,然后跳出開發(fā)者工具頁面刷新

一下頁面再進入,點擊開發(fā)者工具界面上方的數(shù)據(jù)預覽Preview按鈕。

可以看到需要的所有的數(shù)據(jù)信息都是呈現(xiàn)json格式傳遞在這個網(wǎng)頁面,還

得知他是get方法響應(yīng)的網(wǎng)站,所以可以根據(jù)以上特點通過Requests方法中的

get方法來獲得響應(yīng)的數(shù)據(jù),最原始的數(shù)據(jù)格式是呈現(xiàn)json格式的所以需要重

8

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

復獲取響應(yīng)數(shù)據(jù)然后依次寫入到csv格式的文件當中,頁面數(shù)據(jù)分析如圖3-4。

圖3-4分析數(shù)據(jù)類型頁面圖

3.3編程實現(xiàn)

首先,導入所需庫如圖3-5。

圖3-5導入所需庫頁面圖

設(shè)置網(wǎng)址,選擇對應(yīng)的榜單,進入榜單后設(shè)置定位標簽,定位到iframe,

然后獲取頁面,使用Xpath,之后使用字典存放起來并輸出,如圖3-6。

9

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

圖3-6請求頭內(nèi)容頁面圖

代碼實現(xiàn)如下:

#每個歌單的歌曲爬取

importtime

importpandasaspd

fromlxmlimportetree

#fromentryimportdriver

fromseleniumimportwebdriver

importjson

driver=webdriver.Chrome()

frommon.byimportBy

base_url="/#/discover/toplist?id="

bang_typical={'飆升榜':19723756,'新歌榜':3779629,'原創(chuàng)榜':2884035,'熱歌榜':3778678}

#選擇榜單

foriinrange(4):

bang=(list(bang_typical.keys())[i])

print(bang_typical[bang])

#構(gòu)造榜單對應(yīng)的鏈接

url=base_url+str(bang_typical[bang])

print('開始分析:-%s'%(bang))

print(url)

#進入榜單

10

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

driver.get(url)

time.sleep(3)

#iframe標簽定位,必要的,否則無法定位其他標簽

_iframe=driver.find_element(By.XPATH,"http://iframe[@id='g_iframe']")#找到iframe標簽

driver.switch_to.frame(_iframe)

time.sleep(1)

page_text=driver.execute_script("returndocument.documentElement.outerHTML")

#獲取頁面

html=etree.HTML(page_text)

trs=html.xpath('//tbody/tr')

rank_list=[]

title_list=[]

span_list=[]

singer_list=[]

fortrintrs:

rank=tr.xpath(".//span[@class='num']/text()")[0]#注意xpath獲取到的是列表,

需提取其元素

title=tr.xpath(".//b/@title")[0]

span=tr.xpath(".//td[@class='s-fc3']/span[@class='u-dur']/text()")[0]

singer=tr.xpath(".//div[@class='text']/span/@title")[0]

rank_list.append(rank)

title_list.append(title)

span_list.append(span)

singer_list.append(singer)

#輸出榜單結(jié)果

df_bang=pd.DataFrame({'排名':rank_list,'歌名':title_list,'時長':span_list,'歌手':singer_list})

#表頭

print(df_bang)

df_bang.to_csv("SongList/"+bang+".csv",index=False,encoding='utf-8-sig')

對網(wǎng)易云進行解密評論,首先導入庫,如圖3-7。

圖3-7開發(fā)所需庫導入圖

設(shè)置網(wǎng)址,并使用header偽裝瀏覽器,并使用代理IP,防止被反爬封禁,

如圖3-8。

11

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

圖3-8代理IP和偽裝圖

使用for函數(shù)循環(huán),獲取網(wǎng)易云中的四個榜單中的rid與ThreadIDd參數(shù),

分別用四個def函數(shù)對其進行解密,如圖3-9。

圖3-9解密四個榜單圖

解密完成之后,再和之前一樣獲取網(wǎng)頁即可,具體實現(xiàn)代碼如下:

#解密爬取網(wǎng)易云評論分頁進行

importrequests

fromCryptodome.CipherimportAES

frombase64importb64encode

importjson

importpandasaspd

url='/weapi/comment/resource/comments/get?csrf_token='

header={

"user-agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36

(KHTML,likeGecko)Chrome/Safari/537.36"

}

#代理IP

proxies={

"http":"6:55443",

#"http":"6:55481"

12

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

}

#參數(shù)

forjinrange(4):

#網(wǎng)易云四個榜單data中的的rid與threadIDd參數(shù)

rid_threadId=[

"A_PL_0_19723756",#飆升榜

"A_PL_0_3779629",#新歌榜

"A_PL_0_2884035",#原創(chuàng)榜

"A_PL_0_3778678"#熱歌榜

]

names=['飆升榜','新歌榜','原創(chuàng)榜','熱歌榜']

data={

"csrf_token":"",

"cursor":"-1",

"offset":"0",

"orderType":"1",

"pageNo":"50",

"pageSize":"1000",

"rid":rid_threadId[j],

"threadId":rid_threadId[j]

}

e='010001'

f=

"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8

a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3

685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece

0462db0a22b8e7"

g='0CoJUm6Qyw8W8jud'

i="nld9q9R9aGKtrQ68"

defget_encSeckey():

return

"8a1d863fbfcf2395fd9de5347cd0a5c7d7fade1cf2ea8b1e59efb58334f9cd75cea80de67f1ca6e8f5e

c06191764d33ba1d76933f49d00174e5aea6de742f28d2e44353b9ab346eb096d778714954ca2922

cfd04953ad80c9f9a1868b6c8412e22f530be1b0fe33b6334cb87a90a6e38ed697f7518abf71f3ef060

d85a8f88ed"

defget_params(data):

first=enc_params(data,g)

second=enc_params(first,i)

returnsecond

13

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

defto_16(data):

pad=16-len(data)%16

data+=chr(pad)*pad

returndata

defenc_params(data,key):

iv="0102030405060708"

data=to_16(data)

aes=AES.new(key=key.encode("utf-8"),IV=iv.encode("utf-8"),

mode=AES.MODE_CBC)

bs=aes.encrypt(data.encode("utf-8"))

returnstr(b64encode(bs),'utf-8')

"""

functiona(a){

vard,e,b=

"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",c="";

for(d=0;a>d;d+=1)

e=Math.random()*b.length,

e=Math.floor(e),

c+=b.charAt(e);

returnc

}

functionb(a,b){

varc=CryptoJS.enc.Utf8.parse(b)

,d=CryptoJS.enc.Utf8.parse("0102030405060708")

,e=CryptoJS.enc.Utf8.parse(a)

,f=CryptoJS.AES.encrypt(e,c,{

iv:d,

mode:CryptoJS.mode.CBC

});

returnf.toString()

}

functionc(a,b,c){

vard,e;

returnsetMaxDigits(131),

d=newRSAKeyPair(b,"",c),

e=encryptedString(d,a)

}

functiond(d,e,f,g){d:datae:'010001

varh={}

14

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

,i=a(16);

returnh.encText=b(d,g),

h.encText=b(h.encText,i),

h.encSecKey=c(i,e,f),

h

}

"""

reqs=requests.post(url,proxies=proxies,headers=header,data={

"params":get_params(json.dumps(data)),

"encSecKey":get_encSeckey()

})

#print(reqs)

reqss=json.loads(reqs.text)["data"]["comments"]

print(json.loads(reqs.text))

print("**************************************************************")

#print(reqs)

#print(reqss)

#print(type(reqss))

list_id=[]

list_name=[]

list_reply=[]

list_time=[]

list_review=[]

avatars_url_list=[]

x=0

foriinrange(1000):

ifstr(reqss[i]["user"]["nickname"])=='None'orstr(reqss[i]["richContent"])=='None':

x+=1

continue

#print(str(reqss[i]["user"]["nickname"]))

ifstr(reqss[i]["user"]["nickname"])[0]=="-":

txt=str(reqss[i]["user"]["nickname"]).replace('-','')

#print(txt)

list_name.append(txt)

else:

list_name.append(str(reqss[i]["user"]["nickname"]))

list_reply.append(str(reqss[i]["likedCount"]))

list_time.append(reqss[i]["timeStr"])

list_review.append(str(reqss[i]["richContent"]))

avatars_url_list.append(reqss[i]["user"]["avatarUrl"])

list_id.append(i-x)

df_dang=pd.DataFrame(

15

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

{'id':list_id,'用戶名':list_name,'回復數(shù)':list_reply,'時間':list_time,'評論內(nèi)容':

list_review,

'頭像地址':avatars_url_list})

df_dang.to_csv("UserComments/"+names[j]+".csv",index=False,encoding='utf-8-sig')

4數(shù)據(jù)清洗與處理

獲得龐大的數(shù)據(jù)集之后需要對數(shù)據(jù)進行預處理,也就是所謂的清洗和檢查,

確定爬取過來的數(shù)據(jù)是否存在無效值和確實值,要保證數(shù)據(jù)的一致性,這個對于

信息質(zhì)量的評估是一項很重要的任務(wù)。不僅如此,需要將數(shù)據(jù)進行有理化和有序

化,這樣子能夠在數(shù)據(jù)調(diào)用共享過程中方便很多開發(fā)人員對數(shù)據(jù)信息的使用。

本次畢業(yè)設(shè)計中需要將爬下來的數(shù)據(jù)和網(wǎng)頁原數(shù)據(jù)進行比對,并且檢查是

否出現(xiàn)空值、錯值,還有數(shù)據(jù)的位置是否正確。根據(jù)不同的需求要對數(shù)據(jù)進行不

同的處理。

4.1數(shù)據(jù)清洗

打開JupyterNotebook軟件,從存儲的txt文件中讀取數(shù)據(jù),并準備進行

數(shù)據(jù)清理,網(wǎng)易云排行榜的數(shù)據(jù)讀取如圖4-1所示。

圖4-1數(shù)據(jù)清洗準備頁面圖

經(jīng)過比對和檢查,發(fā)現(xiàn)數(shù)據(jù)不存在缺失,錯位還有空值,那么根據(jù)需求將有

效數(shù)據(jù)統(tǒng)一規(guī)劃去掉不要的行列數(shù)據(jù),防止數(shù)據(jù)冗余。因此只需保留需要的數(shù)據(jù),

16

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

然后整理為原網(wǎng)頁格式存入data.csv文件中,留存后續(xù)作為統(tǒng)計分析、可視化

使用,數(shù)據(jù)清洗完成界面如圖4-2。

圖4-2數(shù)據(jù)清洗完成界面圖

4.2數(shù)據(jù)儲存

數(shù)據(jù)儲存得方法有很多種,常見得可以直接用記事本格式儲存(txt),或者

直接用其他文件的形式儲存csv、excel、json等,但是以上方法保存的數(shù)據(jù)體

量普遍都比較小。如果需要儲存較大的數(shù)據(jù)信息就需要用到的數(shù)據(jù)庫,數(shù)據(jù)庫也

分為關(guān)系型和非關(guān)系型數(shù)據(jù)庫。關(guān)系型數(shù)據(jù)庫比較典型的有MySQL和Oracle等,

非關(guān)系型數(shù)據(jù)庫等以鍵值對形式儲存數(shù)據(jù)的代表有Mongodb、Redis等。

4.3編程實現(xiàn)

本次畢業(yè)設(shè)計使用csv存儲文件數(shù)據(jù),核心實現(xiàn)代碼如圖5-3所示。

17

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

圖4-3數(shù)據(jù)存儲為csv頁面圖

5數(shù)據(jù)統(tǒng)計與分析

5.1數(shù)據(jù)準備

導入相關(guān)庫,使用pandas加載源數(shù)據(jù),如圖5-1、5-2。

圖5-1數(shù)據(jù)準備頁面圖

18

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

圖5-2數(shù)據(jù)加載頁面圖

打開本地data.csv文件,再次確認數(shù)據(jù)的準確性,如圖5-3。

圖5-3txt文檔存儲頁面圖

5.2數(shù)據(jù)展示

5.2.1依據(jù)歌手進行統(tǒng)計

通過詞云圖對歌手進行統(tǒng)計的代碼如下,詞云圖如圖5-4。

#1.新歌排行榜歌曲歌手詞云圖

singer_group=data['歌手'].value_counts()

singer_dict=dict(singer_group)

labels=list(singer_dict.keys())

sizes=list(singer_dict.values())

values=list(map(lambdax:int(x),sizes))

v1=list(zip(labels,values))

defwordcloud()->WordCloud:

c=(

19

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

WordCloud()

.add("",v1,word_size_range=[20,80])

.set_global_opts(title_opts=opts.TitleOpts(title="歌手詞云圖"),

toolbox_opts=opts.ToolboxOpts())

)

returnc

wordcloud().render('../網(wǎng)易云音樂爬取分析與數(shù)據(jù)展示/singer_map.html')

圖5-4歌手歌曲云詞圖

從5-4的歌手詞云圖可以得到的結(jié)論是網(wǎng)易云新歌榜的歌手周杰倫的出現(xiàn)

頻率最高,其次便是祁隆、鄧麗君和王菲這些歌手。通過詞云圖,可以側(cè)面得

到的結(jié)論是,在網(wǎng)易云新歌榜中周杰倫的上榜歌曲一定是第一位的。

5.2.2依據(jù)歌曲評分進行統(tǒng)計

通過餅圖對評分進行統(tǒng)計的代碼如下,餅圖展示圖如圖5-5。

#2.歌曲評分分布餅狀圖

album_group=data['評分'].value_counts()

group_dict=dict(album_group)

labels=list(group_dict.keys())

sizes=list(group_dict.values())

plt.pie(sizes,labels=labels,startangle=90,autopct='%1.1f%%')

plt.title('評分分布餅狀圖')

plt.show()

20

湖南商務(wù)職業(yè)技術(shù)學院畢業(yè)設(shè)計

圖5-5歌曲評分分別餅圖

從圖5-5中可以看出網(wǎng)易云新歌榜的歌曲評分集中在八分,占比55.4%。其

次就是九分,占比18.5%。所以可以看出網(wǎng)易云的新歌榜歌曲質(zhì)量還是非??捎^

的,聽眾的反響也比較好。

5.2.3根據(jù)歌手上榜單曲數(shù)進行統(tǒng)計和分析

通過柱狀圖對歌手上榜單曲數(shù)進行統(tǒng)計的代碼如下,柱狀圖展示圖如圖5-6。

#3.前十歌手的上榜歌曲總數(shù)柱狀圖

singer_group=data['歌手'].value_counts()

group_dict=dict(singer_group)

x=list(group_dict.keys())[:10]

y=list(group_dict.values())[:10]

pl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論