




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
湖南商務職業技術學院畢業設計
目錄
1引言............................................................................................................................1
1.1項目背景......................................................................................................1
1.2開發環境與工具..........................................................................................2
1.2.1Python簡介..........................................................................................2
1.2.2MySQL簡介............................................................................................3
1.2.3JupyterNotebook簡介......................................................................3
1.2.4PyCharm簡介........................................................................................4
2需求分析....................................................................................................................5
2.1可行性需求分析..........................................................................................5
2.2采集目標功能分析......................................................................................6
2.3關鍵技術分析..............................................................................................6
2.3.1網絡爬蟲技術.......................................................................................6
2.3.2文件存取技術.......................................................................................8
2.3.3可視化技術...........................................................................................9
3數據采集..................................................................................................................10
3.1采集頁面分析............................................................................................10
3.2字段分析....................................................................................................15
3.3編程實現....................................................................................................16
4數據清洗與處理......................................................................................................18
4.1數據清洗....................................................................................................18
4.2數據儲存....................................................................................................21
4.3編程實現....................................................................................................22
5數據統計與分析......................................................................................................23
5.1數據準備....................................................................................................23
5.2數據展示....................................................................................................25
5.2.1依據專輯進行統計.............................................................................25
5.2.2依據標簽類型進行統計.....................................................................26
I
湖南商務職業技術學院畢業設計
5.2.3根據歌手上榜的歌曲量統計和分析.................................................27
5.3綜述............................................................................................................28
6小結..........................................................................................................................29
參考資料.........................................................................................................................30
II
湖南商務職業技術學院畢業設計
基于Python的咪咕音樂網站數據采集與分析
1引言
在當今時代背景下,大數據與人工智能等計算機互聯網技術在為百姓民生
的各個方面提供了智能生活的技術基礎。
衣食住行、吃喝玩樂等方面產生的海量數據等待開發的價值愈來愈大,而
當今這代人正處于這數據時代的狂潮中,抓住其中的機遇,便有飛黃騰達的機
會。
音樂領域產生的數據價值同樣具備如此,它作為一種文化藝術形式,在全
球范圍內一直在不斷發展和演變。全球化和跨文化交流的增加,使得音樂風格
越來越多樣化和包容性。人們對不同文化、民族和性別的音樂越來越包容和欣
賞,這也使得更多的音樂類型和藝術家能夠脫穎而出。
隨著數字技術的發展,音樂的傳播和消費方式也發生了巨大的變化。流媒
體服務的興起使得音樂更加方便和易于獲取,同時也使得音樂產業的商業模式
發生了變化。音樂和其他藝術形式的跨領域合作越來越普遍。比如,音樂和電
影、游戲、時尚等領域的結合,創造出了更加豐富和有趣的作品。
總的來說,音樂發展的現狀和趨勢是多樣性、數字化、跨界合作、可持續
發展和社交媒體化。隨著技術的不斷發展和人們對音樂的需求不斷變化,音樂
產業也將繼續不斷創新和發展。因此,音樂領域所產生的數據價值也越來越不
可忽視。
1.1項目背景
隨著網絡技術的進步,人們不僅能夠通過網絡學習,還能夠享受各種附帶
產品的好處,諸如網絡音樂和游戲和小說等等。
越來越多的人選擇在網上聽音樂、下載音樂。因此,了解音樂的流行程度
和市場趨勢就變得尤為重要。對于一家音樂公司而言,需要將音樂網站中產生
的數據價值挖掘出來,為公司的發展帶來更多的利益空間。那么,就需要對自
己運營的音樂網站爬取統計出有用的信息,而爬取音樂排行榜網站數據是數據
挖掘技術在實際中的應用。
因此,在這樣一個背景下,爬取音樂排行榜網站數據并做出分析對于用戶
和企業都有巨大的價值。它可以幫助用戶快速得到最新、最熱門的歌曲信息,
1
湖南商務職業技術學院畢業設計
并且基于數據分析和推薦算法來為用戶提供針對性和個性化的推薦服務。對于
商業公司而言,也能夠通過對用戶口味和偏好進行深入分析,為公司提供更加
精細化的市場調研和宣傳方案。
爬取音樂排行榜網站數據還可以具有學術研究價值。比如可以研究某段時
間內不同地區或群體喜歡哪些類型、風格、歌手的音樂,從中發現一些文化現
象并進行深入思考。
本次畢業設計就是獲取咪咕音樂網站的音樂排行榜中的歌曲信息,以下是
爬取歌曲信息并對數據進行處理和可視化的操作步驟。
首先對大型咪咕音樂網站排行榜的網頁源代碼進行網頁解析,然后爬取歌
曲的網址后,再對歌曲地址進行一次網頁解析后獲取詳細的歌曲信息。接下來,
將爬取得到的歌曲數據進行數據清洗和分析,保證數據的完整性和準確性。最
后再采取可視化技術將處理后的數據用圖表的形式展示,得到相應的數據信息
結論。
1.2開發環境與工具
1.2.1Python簡介
Python是由荷蘭數學家和計算機科學研究學會的吉多·范羅蘇姆在20世
紀90年代初設計開發的一種解釋型編程語言。
Python語言最大的特點就是簡單,語法簡潔明了,初學者也容易掌握。相
較于其他編程語言,Python實現同一功能的代碼通常最短,而且Python的第三
方庫足夠豐富、免費開源、支持跨多平臺且可移植性強。
Python可以用于編寫網絡爬蟲,從而可以爬取咪咕音樂網站排行榜的歌單
數據信息。具體地說,可以使用Python中的第三方庫(例如requests、re、etree
等)來模擬瀏覽器請求數據,然后解析HTML或XML文件,提取出排行榜相關的
信息。
以咪咕音樂排行榜網站為例,可以使用requests、正則表達式和Xpath庫
向網頁發送請求并解析HTML內容,在解析過程中篩選出有用的信息,如歌單網
址、歌曲名稱、歌手、歌曲專輯等等。通過分析網頁源代碼,可以發現音樂排
行榜數據存儲在特定的URL上,因此只需要構造相應的URL并發送請求即可獲
取大量排行榜數據。
總的來說,Python作為一種通用編程語言,在網絡爬蟲領域有著廣泛的應
用。利用Python網絡爬蟲具有高效、便捷和靈活性強等優點,還能支持多種數
2
湖南商務職業技術學院畢業設計
據存儲格式(如文本文件、數據庫等)。
同時,Python還包含大量的第三方庫,以下是本次畢業設計所涉及到的相
關庫介紹。
(1).Requests:HTTP協議訪問及網絡爬蟲庫,比urllib使用更簡潔。
(2).Re:正則表達式解析和處理功能庫,里面包含了多種字符串匹配的方
法。
(3).Csv:csv屬于python中的內置模塊,它能夠讀取csv格式的文件或者
將數據存入到csv表格中,也能讀取txt格式文件或者將數據存入到txt表格
中。
(4).NumPy:處理數據類型相同的多維數組庫,NumPy庫的數據結構比
Python自帶的更加高效。
(5).Pandas:基于NumPy的Python數據分析高層次應用庫。提供了易用的
數據結構和數據分析工具,操作索引即操作數據。
(6).Matplotlib:繪圖庫,主要是偏向于二維繪圖包括折線圖、條形圖、
扇形圖、散點圖、直方圖等等。
1.2.2MySQL簡介
MySQL是一款由瑞典MySQLAB公司研發的關系型數據庫管理系統,現屬于
Oracle旗下產品,標志為海豚,象征其讀寫速度快、準確無誤。
相較于儲存所有數據于同一倉庫內,MySQL采用關系型儲存方式,將數據分
散至不同表中,提高了速度和靈活性。其安全、高效且與多款主流計算機語言
高度兼容,是當前最受歡迎的關系型數據庫管理系統之一。除此之外,其開放
源碼的特點也使得中小型和大型網站廣泛采用。
MySQL可以用來存儲和處理大量的結構化數據,而本次畢業設計爬取的咪咕
音樂網站排行榜歌曲數據就是大量的結構化數據,所以這也是選擇它作為數據
存儲的理由。
MySQL除了存儲功能,還可以用于查詢、更新和刪除數據等操作。因此,可
以通過SQL語句將存儲到MySQL數據庫的歌單數據進行高效、靈活和精確的查
詢和分析,從而快速了解用戶需求和流行趨勢,并做出相應的決策。
1.2.3JupyterNotebook簡介
JupyterNotebook是一款兼容性強的基于Web的開源應用軟件,它的文本
和代碼編輯功能非常強大且交互性良好。無論是進行數據分析還是邏輯整理,
3
湖南商務職業技術學院畢業設計
使用JupyterNotebook都能事半功倍。它不僅支持Python,還支持其他40多
種編程語言,并繼承了IPython的所有優點。
正是因為這些特性,讓JupyterNotebook在機械學習,數據清洗、數據分
析、數據挖掘等領域得到眾多程序員的喜愛。對于初學者來說安裝Jupyter
Notebook的方法就是安裝Anaconda。因為Anaconda是免費的,可以輕松地完
成該軟件的下載和安裝。
JupyterNotebook具備交互式計算環境,它可以讓用戶在瀏覽器中編寫、
運行和共享代碼。使用JupyterNotebook對爬取音樂網站排行榜的數據進行數
據清洗主要具備以下優勢。
(1).JupyterNotebook支持Python語言,而Python是一種流行的網絡爬
蟲和數據處理語言。可以在JupyterNotebook中使用Python進行音樂排行榜數
據的網頁抓取、數據清洗、分析和可視化等操作。
(2).JupyterNotebook還支持Markdown語法,可以直接在Notebook中添
加富文本內容、公式、鏈接等元素。這些功能可以幫助你更好地記錄和分享代
碼思路、實驗結果和心得體會。
綜上所述,JupyterNotebook通過結合Python語言和豐富的插件庫,可以
高效地實現對咪咕音樂排行榜歌曲數據的數據清洗以及簡單方便的數據準備。
1.2.4PyCharm簡介
PyCharm是一款Python集成開發環境,在當下非常流行。它具有良好的編
碼、調試、版本控制和測試工具,可以幫助程序員更方便地編寫優秀的Python
代碼。而對于爬蟲爬取咪咕音樂排行榜的歌曲數據信息來說,PyCharm也可以提
供許多便利。
首先,PyCharm集成了強大的Python調試器。在爬蟲的開發過程中,會遇
到許多錯誤,例如請求超時、頁面解析錯誤等。這時,可以使用PyCharm的調
試工具手動調試代碼,定位問題并修復。調試工具可以其逐行執行代碼,并監
視變量和引用。這可以大大提高代碼調試的效率和準確性。
其次,PyCharm同樣提供了出色的編碼實用工具。爬蟲編碼通常會包含大量
字符串操作、正則表達式處理和編碼轉換。PyCharm內置了很多實用的插件,可
以使這些操作更加簡單和高效。例如,它可以自動補全變量名和方法名稱,高
亮語法錯誤和代碼警告,快速跳轉到變量定義和查看文檔,以及執行快捷鍵自
動生成代碼。這些功能可以讓程序員更加專注于開發和調試自己的代碼,而不
必擔心代碼中不必要的錯誤和繁瑣的細節。
4
湖南商務職業技術學院畢業設計
最后,PyCharm在測試方面也提供了很大的支持。任何程序都需要經過完整
和準確的測試,以保證其在生產環境中能夠正常運行。PyCharm可以為其生成測
試框架和測試報告,并支持持續集成和測試,提高代碼的完整性和準確性。
本次畢業設計主要依靠PyCharm開發工具完成對咪咕音樂排行榜數據的爬
取,存儲實現和可視化功能。
在爬取咪咕音樂排行榜歌曲相關數據信息時,用PyCharm可以更加輕松、
快捷地開發出高效的爬蟲程序,并在保證程序穩定運行的前提下,不斷地迭代
和更新爬蟲業務邏輯。
總的來說,PyCharm提供的強大的編碼、調試和測試工具使其成為爬蟲開發
的理想工具。其內置的各種實用插件可以大大提高代碼開發的效率和準確性。
2需求分析
2.1可行性需求分析
(1).政策可行性
首先需確認,是否有可以合法獲取數據的渠道和方式。需要了解音樂網站
的相關規定和政策,是否允許第三方爬取其數據。總之,要在合法的條件下,
爬取可行的音樂網站排行榜數據。
(2).技術可行性
本次畢業設計中將使用Python語言來實現數據獲取,數據清洗,數據可視
化等操作。在數據獲取的過程中遇到一些問題,通過抓包分析發現咪咕音樂網
站歌單信息頁面的數據是動態傳輸的,所以通過瀏覽器控制臺可以獲取請求和
其參數。得到網頁面數據的返回值。
然后將獲取的原始數據儲存到txt文件,以便在后續的數據預處理和可視
化中再進行調用。最后再將處理過后的數據存入MySQL數據庫中做持久化儲存。
以上為此次畢業設計的技術可行性,在后續的工作中會將所有的步驟實現
到位,并保證數據的準確性和安全性。
(3).需求可行性
優美動聽的音樂可以放松人的心情,是人們在苦燥煩悶時極佳的“調味
劑”。有時,有音樂的陪伴,會溫暖消冷的心神。
本次畢業設計通過爬取咪咕音樂排行榜的數據,來分析當日排行榜上的歌
曲信息。然后從歌手、標簽、專輯等方面對其進行深度剖析,分析出有價值的
信息,最后通過數據可視化得出結論。
5
湖南商務職業技術學院畢業設計
(4).數據可行性
在獲取到所需數據后,需要對這些數據進行清洗、處理、統計等分析工作。
因此,在開始之前需要確定所要收集的數據類型與數量,并明確使用何種方法
來對數據進行處理以滿足畢業設計指標要求。
2.2采集目標功能分析
本次畢業設計的數據集來源為咪咕音樂排行榜網站,通過Python爬取咪咕
音樂所有排行榜上歌曲的信息。所選擇的音樂排行榜榜單分別有新歌榜,熱歌
榜,原創榜,影視榜,內地榜,港臺榜,歐美榜,日韓榜,KTV榜,網絡榜和彩
鈴榜。獲取的目標數據分別是歌單排名,歌曲名稱,演唱者,作詞者,作曲者,
所屬專輯以及音樂標簽。
對獲取的數據進行去重、過濾無效信息,格式轉換等操作,生成規范化的
數據表格。數據清洗后共860條記錄,爬取完成后盡可能的去檢查數據的準確
性,確保爬取的數據無誤并且是屬于咪咕音樂實時存在的排行榜歌曲信息。
將獲取到并處理后的數據保存到MySQL數據庫中,在后續進行分析時可以
隨時調用使用。將采集到的數據通過柱形圖、折線圖表形式展示,方便用戶查
看和理解相應的音樂歌曲信息。
最后對數據表進行多個維度的分析后詳細的闡述。例如,從各歌曲的標簽
對其進行分析,查看排行榜中跟音樂最緊密相關的標簽。也可以通過獲取歌手
的歌曲沖上排行榜的總數,分析出當日受歡迎的歌手有哪些。
2.3關鍵技術分析
2.3.1網絡爬蟲技術
網絡爬蟲是指通過程序自動抓取互聯網上的信息的技術,而爬取音樂網站
排行榜數據正是網絡爬蟲技術的一種應用。在這個場景下,網絡爬蟲可以自動
從目標音樂網站上獲取所需數據,然后進行清洗和處理,最終生成規范化的數
據表格。因此,可以說網絡爬蟲是實現爬取音樂網站排行榜數據的關鍵技術之
一。
爬取音樂排行榜數據需要使用一種特定的爬蟲技術,以適應音樂網站的結
構和數據格式,常見的包括:
(1).正則表達式:使用正則表達式的模式匹配,可以更準確地從網頁源代
碼中提取所需的數據。
6
湖南商務職業技術學院畢業設計
(2).Xpath:使用XPath語言可以解析網頁中的HTML元素,并定位到所需
的數據。它是一種非常靈活的解析方法,可以在網頁結構變化時動態適應。
(3).BeautifulSoup:這是Python的一個HTML解析庫,可以讓開發者能夠
快速、方便地從網頁中找到所需的數據。
(4).Scrapy:這是Python的一個高級網絡爬蟲框架,它可以處理大規模的
網頁數據爬取,并支持分布式爬蟲的部署。除了以上技術外,還需要一些數據
持久化技術,例如將爬取的數據存儲到數據庫中,以便于后續處理和分析。
本次畢業設計選取的爬蟲技術為正則表達式和Xpath,以下是對它們的詳細
闡述以及對應的實現代碼。
(1).正則表達式
正則表達式可以對字符、字符串、數字等不同數據類型進行匹配,具有很
強的靈活性,而且引擎的實現方式精簡高效,可以快速地處理大量的數據,并
且預定義為一個模板,以后可以直接調用,實現代碼的重用。除了單個字符匹
配之外,正則表達式還可以用于處理字符集合,比如匹配一個含有某些字符的
字符串、匹配郵箱地址等。
本次編程利用正則表達式完成歌單地址ID值的獲取。先通過正則表達式的
research方法先將爬取的網頁源代碼截取到存放歌單地址ID值的<script>標
簽,縮減源代碼范圍,確保正則表達式的findall方法能準確篩選出想要的歌
曲id值,最后再將歌曲id值與網址拼接成歌曲網址后存儲到歌曲網址列表返
回,正則表達式的實現代碼如下。
#獲取歌曲地址
defget_music_urls(url):
data=requests.get(url,headers=headers).text
#在源代碼中找到歌曲id的標簽
copyrightId_temp=re.search(r'<script>.*?varlistData=(.*?)</script>',data,
re.DOTALL).group(1)
#爬取每個歌曲的id
copyrightId=re.findall(r'".*?.jpg","copyrightId":"(.*?)","duration"',copyrightId_temp)
music_urls=['/v3/music/song/{}'.format(i)foriincopyrightId]
returnmusic_urls
(2).Xpath
XPath是與HTML、XML完美兼容的語言,用于解析XML及HTML文檔非常方
便,可以直接從屬性或元素中提取所需內容而無需分析整個文檔結構。而且結
7
湖南商務職業技術學院畢業設計
構清晰簡單,易于編寫和學習,精通XPath語言可以很快地提高數據抓取速度。
可以實現各種復雜的數據提取操作,避免錯誤和無用內容。
本次編程利用Xpath完成目標數據的收集。先將爬取的源代碼轉換為標準
的html格式,然后通過xpath方法在html格式的源代碼中依次獲取歌名、歌
手、作詞者、作曲者、專輯和音樂標簽的信息,并把它們存儲到音樂信息列表
后返回,Xpath的實現代碼如下。
#獲取歌曲信息
defget_music_info():
foriinrange(len(music_urls)):
data=requests.get(music_urls[i],headers=headers).text
html=etree.HTML(data)
rank=str(i+1)#排名
name=html.xpath('/html/body/div[2]/div[2]/div[2]/h2/text()')[0]#歌名
singer=html.xpath('/html/body/div[2]/div[2]/div[2]/div[1]/a/text()')[0]#歌手
lyricist=
html.xpath('/html/body/div[2]/div[2]/div[2]/div[2]/p[1]/span/text()')[0].replace('作詞:','')#作
詞
composer=
html.xpath('/html/body/div[2]/div[2]/div[2]/div[2]/p[2]/span/text()')[0].replace('作曲:','')#作
曲
album=html.xpath('/html/body/div[2]/div[2]/div[2]/div[2]/p[3]/span/a/text()')[0]#專
輯
label=html.xpath('/html/body/div[2]/div[2]/div[2]/div[2]/p[4]/span/span[1]/text()')[0]
#標簽
#將所有數據保存到列表中
music_info.append([rank,name,singer,lyricist,composer,album,label])
2.3.2文件存取技術
網絡爬蟲的txt文件存儲技術是指將爬取的數據存儲在文本文件中,使用
文本文件存儲方式具有以下優點:
(1).簡單易用:文本文件格式簡單,存儲和讀取都非常方便,不需要專門
的數據庫管理技術。
(2).高效性:由于文本文件不需要額外的程序或庫支持,因此在處理小型
數據時能夠獲得較高的讀取和寫入速度。
(3).兼容性:文本文件是常見的數據格式,可以在不同的操作系統、軟件平
臺和程序中讀取和使用。
(4).便于共享:爬蟲數據存儲在文本文件中,便于共享和傳輸。
8
湖南商務職業技術學院畢業設計
(5).易于維護和備份:文本文件的結構簡單,易于備份,可以手工編輯和
修改,使數據的維護和管理更加方便。
本次畢業設計存儲咪咕音樂排行榜歌單數據所采用的文件存儲技術就是利
用txt文件存儲技術。在Python代碼中,以追加的方式打開一個文件,然后遍
歷已經獲取的榜單數據信息,利用換行和制表符將其以合適的格式存儲下來,
txt存儲的實現代碼如下。
#將獲取到的數據添加到文件中
defput_info_to_txt(txt_name):
withopen(txt_name,'w+',encoding='utf-8')asf1:
foriinmusic_info:
forjini:
ifj==i[-1]:
f1.write(j+'\n')
else:
f1.write(j+'\t')
2.3.3可視化技術
可視化技術(VisualizationTechnology)是指運用圖形化手段將數據、
信息等抽象概念通過可視化方式展現出來的技術。它將數據、信息轉換成直觀、
易于理解和掌握的圖形,讓人們可以通過直觀感受來獲取深層次的數據信息,
從而更好地發現數據中隱藏的規律和趨勢。
可視化技術可以將爬取到的音樂排行榜歌單數據通過各種圖表、地圖、動
態圖等形式來展示,進行可視化呈現,從而更直觀、生動、形象地展示音樂排
行榜中歌手,專輯和歌曲標簽等多個方面的信息。
本次畢業設計使用pycharm工具,實現對排行榜歌單數據的可視化技術。
其中,用pandas庫讀取存儲在txt文件的歌單數據,用matplotlib庫和
pycharts庫將爬取的數據進行圖表可視化展示。
選擇的展示圖表分別是詞云圖、餅圖和柱狀圖,以下是對這些圖表功能特
點的介紹,這也是為什么要展現為這幾種圖的原因。
(1).詞云圖
詞云圖是一種基于文字的可視化技術,它將文本信息通過顏色、字體大小、
重心標示等視覺手段展現出來,從而更加直觀地呈現出關鍵字的出現頻率、重
要程度和相關度等信息。
9
湖南商務職業技術學院畢業設計
詞云圖直觀而易于理解,不需要專業的統計知識,可以快速地將文字數據
變為視覺化的信息,加速了對數據的分析過程。而且有多種形式可以選擇,如
基于形狀的詞云圖、基于位置的詞云圖、基于顏色的詞云圖等。可以根據不同
的數據類型和展示目標進行調整,提高了可視化的靈活性。
同時也能夠更加有效地傳遞信息,而且傳遞的信息準確性和精度較高,具
有較高的可靠性。詞云圖還能夠展示單詞之間的相關性,使得用戶可以深入的
理解數據背后的信息。
(2).餅圖
餅圖是一種基于數據的可視化技術,將數據分割為幾塊“餅狀”區域,并
用不同的顏色或其他可視化方式來區分每個部分的大小或重要程度。
餅圖易于理解和使用,而且不需要專業的統計和計算知識。餅圖可以非常
清楚地顯示不同部分的比例及其在整體中的占比情況,使得人們可直觀感受到
每個部分在整體中的重要性。可以通過多種色彩、圖案等方式來區分不同部分,
使圖表顯示的信息更具吸引力。可以用于比較個體與總體的比例,比較不同時
間段或不同地區的數據差異,有助于更快速準確地觀察和分析數據。
(3).柱狀圖
柱狀圖是一種基于數據的可視化技術,通過使用柱形展示每個數據的大小、
高度或長度。
柱狀圖可以幫助人們更直觀地理解數據,尤其是對于非常大的數據集而言。
可以顯示不同組數據的差異。柱狀圖也可以通過交互來幫助用戶更深入地探索
數據。例如,用戶可以通過鼠標懸停在某個柱子上來獲得詳細信息。
比如,可以使用折線圖或柱狀圖展示不同歌曲或不同曲風的排名變化,使
用地圖可以展示不同地域的音樂受眾分布,使用動態圖可以展示不同時間段內
的音樂排行榜變化趨勢。
除此之外,可視化技術還可以讓數據更加生動、具體,有助于人們更好地
理解、分析和處理數據,更快速、全面地獲取數據背后的規律和趨勢。因此,
在爬取咪咕音樂排行榜數據時,將抓取到的數據進行可視化呈現,將非常有益
于數據的分析和應用。
3數據采集
3.1采集頁面分析
首先通過谷歌瀏覽器搜索咪咕音樂的官方網頁,進入官網后找到并切換到
10
湖南商務職業技術學院畢業設計
音樂榜單,從這獲取咪咕尖叫榜和咪咕特色榜下拉欄的所有音樂排行榜網址,示
例圖如圖3-1。
圖3-1咪咕音樂排行榜榜單圖
然后,選取尖叫新歌榜進行進行頁面分析,尖叫新歌榜的URL為:
/v3/music/top/jianjiao_hotsong。點擊頁面下方的分
頁按鈕,同時觀察URL,發現URL沒有變化,示例圖如圖3-2,3-3。
圖3-2尖叫新歌榜第1頁圖
11
湖南商務職業技術學院畢業設計
圖3-3尖叫新歌榜第2頁圖
按F12調出開發者工具,選擇瀏覽器控制臺的Network面板,然后刷新頁
面,當請求頁面刷新出尖叫新歌榜的請求信息時,選擇該請求信息,將標簽定
位到Headers標頭,分析尖叫新歌榜的請求信息,如圖3-4。
圖3-4開發者工具圖
通過分析,得到該網址的請求方式是get請求。將瀏覽器控制臺切換到
Console面板,準備分析網頁是靜態網頁還是動態網頁。
在命令行中輸入“alert(document.lastModified);”,彈出窗口會記錄時
間,隨著多次刷新頁面,如果時間也會不斷變化的話,則證明該網頁是動態網
12
湖南商務職業技術學院畢業設計
頁,示例圖如圖3-5,3-6。
圖3-5網站彈出時間1圖
圖3-6網站彈出時間2圖
為了進一步爬取動態網頁數據,先選擇點開幾個歌曲,分析他們的網址,
經對比發現他們只有最后一個路徑有偏差,示例圖如圖3-7,3-8。
13
湖南商務職業技術學院畢業設計
圖3-7歌單網址1圖
圖3-8歌單網址2圖
根據經驗推測,該值應該是歌單的網址路徑ID值。經網頁爬取排查發現,
只有網頁源代碼<scripts>標簽下面所有歌曲的路徑ID值是可獲取到的,示例
圖如圖3-9,3-10。驗證推測后,通過這種方式爬取所有歌單地址。
14
湖南商務職業技術學院畢業設計
圖3-9網頁源代碼的歌曲ID值圖
圖3-10經爬取驗證的歌曲ID值圖
總的來說,在對咪咕音樂排行榜的網站進行頁面分析時,也遇到了不少難
題,比如爬蟲知識儲備的缺漏,不知道如何分辨網頁動態與靜態,在確認歌曲
的路徑ID時,尋找那個ID值才是所需要的。不過,最終所有的難題都通過查
詢大量的參考資料得到了有效的解決。
3.2字段分析
進入咪咕音樂尖叫新歌榜的其中一個歌單網址,按F12調出開發者工具,
選擇瀏覽器控制臺的Element面板,通過資源定位符,找到歌單信息集中的位
15
湖南商務職業技術學院畢業設計
置,然后分析信息字段爬取的方式,示例圖如圖3-11。
圖3-11歌曲字段信息圖
咪咕音樂排行榜的歌曲字段分析相對簡單,沒有什么問題,只要確認好歌
單信息的源代碼解析方式就行。
3.3編程實現
對網站進行采集頁面和頁面字段等細節的分析后,準備實現編程需求,完
成數據采集功能。首先導入爬取網站所需要的庫,為爬取網站提供相應方法。
#導入庫
importrequests
fromlxmlimportetree
importre
然后設置請求頭,模擬瀏覽器訪問網站。
#設置請求頭
headers={
'User-Agent':'User-Agent:Mozilla/5.0(WindowsNT6.1)AppleWebKit/537.36(KHTML,
likeGecko)Chrome/63.0.3239.132Safari/537.36'
}
配置好爬蟲的環境后,實現數據采集需求,完成咪咕音樂各榜單的歌單信
息爬取,詳細操作代碼如下。
importrequests
fromlxmlimportetree
16
湖南商務職業技術學院畢業設計
importre
headers={
'User-Agent':'User-Agent:Mozilla/5.0(WindowsNT6.1)AppleWebKit/537.36(KHTML,
likeGecko)Chrome/63.0.3239.132Safari/537.36'
}
#各榜單網頁url
li1=['jianjiao_newsong','jianjiao_hotsong','jianjiao_original','movies','mainland','hktw',
'eur_usa','jpn_kor','coloring','ktv','network']
bangdang_urls=['/v3/music/top/{}'.format(i)foriinli1]
li2=['新歌榜','熱歌榜','原創榜','影視榜','內地榜','港臺榜','歐美榜','日韓榜','彩鈴
榜','KTV榜','網絡榜']
txt_name=['{}數據.txt'.format(i)foriinli2]
#獲取歌曲地址
defget_music_urls(url):
data=requests.get(url,headers=headers).text
#在源代碼中找到歌曲id的標簽
copyrightId_temp=re.search(r'<script>.*?varlistData=(.*?)</script>',data,
re.DOTALL).group(1)
#爬取每個歌曲的id
copyrightId=re.findall(r'".*?.jpg","copyrightId":"(.*?)","duration"',copyrightId_temp)
music_urls=['/v3/music/song/{}'.format(i)foriincopyrightId]
returnmusic_urls
#獲取歌曲信息
defget_music_info():
foriinrange(len(music_urls)):
data=requests.get(music_urls[i],headers=headers).text
html=etree.HTML(data)
rank=str(i+1)#排名
name=html.xpath('/html/body/div[2]/div[2]/div[2]/h2/text()')[0]#歌名
singer=html.xpath('/html/body/div[2]/div[2]/div[2]/div[1]/a/text()')[0]#歌手
lyricist=
html.xpath('/html/body/div[2]/div[2]/div[2]/div[2]/p[1]/span/text()')[0].replace('作詞:','')#
作詞
composer=
html.xpath('/html/body/div[2]/div[2]/div[2]/div[2]/p[2]/span/text()')[0].replace('作曲:','')#
作曲
album=html.xpath('/html/body/div[2]/div[2]/div[2]/div[2]/p[3]/span/a/text()')[0]#專
輯
label=html.xpath('/html/body/div[2]/div[2]/div[2]/div[2]/p[4]/span/span[1]/text()')[0]
#標簽
#將所有數據保存到列表中
17
湖南商務職業技術學院畢業設計
music_info.append([rank,name,singer,lyricist,composer,album,label])
#將獲取到的數據添加到文件中
defput_info_to_txt(txt_name):
withopen(txt_name,'w+',encoding='utf-8')asf1:
foriinmusic_info:
forjini:
ifj==i[-1]:
f1.write(j+'\n')
else:
f1.write(j+'\t')
if__name__=='__main__':
foriinrange(len(bangdang_urls)):
music_urls=get_music_urls(bangdang_urls[i])
music_info=[['排名','歌名','歌手','作詞','作曲','專輯','標簽']]
get_music_info()
print(music_info[0:2])
put_info_to_txt(txt_name[i])
4數據清洗與處理
在爬取收集大量的數據信息后,需要對數據進行預處理,也就是數據清洗
和檢查,確定爬取的數據是否存在無效值,并要保證數據的一致性。這個對于
信息質量的評估是一項很重要的任務。不僅如此,還要將數據進行有理化和有
序化,這樣處理后的數據才能在調用共享過程中方便很多開發人員對數據信息
的使用。
本次畢業設計中通過JupyterNotebook軟件進行數據清洗,將爬下來的咪
咕音樂排行榜的歌曲數據和網頁原數據進行比對,檢查內容是否存在空值、錯
值,還有數據的位置是否正確,并對不同問題的數據要進行不同的處理。
4.1數據清洗
利用JupyterNotebook從存儲的txt文件中讀取數據,準備進行數據清洗,
核心參考代碼如下:
importpandasaspd
df=pd.read_csv(r'D:\pycharm\文件保存位置\python畢業設計\內地榜數
據.txt',sep='\t',engine='python',encoding='utf_8_sig')
18
湖南商務職業技術學院畢業設計
df.head(10)
運行核心代碼生成的數據如圖4-1:
圖4-1數據清洗準備頁面圖
然后使用duplicated()方法驗證數據是否存在重復值,參考示例如圖4-2。
圖4-2數據重復值查驗圖
19
湖南商務職業技術學院畢業設計
經過查驗,發現數據并沒有重復值。接下來,使用isnull()方法判斷數
據是否存在缺失值,參考示例如圖4-3。
圖4-3數據缺失值查驗圖
經過數據查詢后發現數據也沒有存在缺失值,以同樣的方法,去處理其他
排行榜的數據。經驗證,內地榜和其他排行榜的數據沒有漏洞、錯亂或者空值
等問題。
接下來,根據需要,將有效數據進行一致的統一規劃,并且去掉不需要的
行和列數據,以避免冗余數據的影響,最終的數據清洗后的頁面效果如圖4-4
所示。
20
湖南商務職業技術學院畢業設計
圖4-4內地榜數據清洗完成界面圖
保留需要的行列數據,整理為原網頁格式存入txt文件中,以便留存后續
作為統計分析、可視化使用。
4.2數據儲存
數據儲存的方式方法有很多,可以直接用記事本格式儲存(txt),也可以
用其他文件的形式儲存csv、excel、json等,但是以上方法保存的數據體量都
普遍不大。如果需要儲存大量的數據信息就需要用到數據庫,數據庫分為關系
型和非關系型數據庫。關系型數據庫比較典型的有MySQL和Oracle等,非關系
型數據庫等以鍵值對形式儲存數據,其中的代表有Mongodb、Redis等。
本次畢業設計用到的是txt、MySQL來實現數據儲存操作。首先,使用Python
的文件寫入方法將數據寫入到txt,實現代碼如下。
#將獲取到的數據添加到文件中
defput_info_to_txt(txt_name):
withopen(txt_name,'w+',encoding='utf-8')asf1:
foriinmusic_info:
forjini:
ifj==i[-1]:
f1.write(j+'\n')
else:
f1.write(j+'\t')
然后,打開VMwareWorkstationPr虛擬機啟動Linux環境,將txt文件數
據上傳到Linux系統后將其導入到MySQL。最后進行數據檢驗,如圖4-5所示。
21
湖南商務職業技術學院畢業設計
圖4-5數據存儲到MySQL檢驗頁面圖
數據存儲的實現需要考慮較多的細節,比如在遍歷歌曲列表信息時,要將
每行的歌單信息以一定的格式分隔,并在每行數據讀取的結尾進行換行,在數
據儲存完成后,一定要檢驗數據是否存儲成功。
4.3編程實現
創建數據庫,用于存放數據表,實現代碼與結果如圖4-6。
圖4-6創建數據庫圖
創建數據表,構建存儲數據的結構,實現代碼與結果如圖4-7。
圖4-7創建數據表圖
將存儲在本地txt文件的歌單信息上傳到Linux系統后,將其導入數據表
中,實現代碼與結果如圖4-8。
圖4-8導入文件數據到數據表圖
22
湖南商務職業技術學院畢業設計
通過查詢數據表驗證存入數據是否正確,實現代碼與結果如圖4-9。
圖4-9數據驗證圖
之所以將爬取并存儲到txt的文件數據轉存到存儲到MySQL數據庫,有以
下幾個原因:
(1).數據庫的數據結構更為清晰和規范,可以更方便地進行數據管理和查
詢。
(2).數據庫可以進行事務處理,可以保證多個操作的一致性和完整性。
(3).數據庫可以進行并發處理和多線程操作,可以提高數據處理的效率。
(4).數據庫能夠對數據進行備份和恢復,可以提高數據的安全性。
(5).數據庫還可以進行數據的分析和處理,為業務提供更多的可能性。
綜上所述,將爬取數據存儲到MySQL數據庫更加靈活、高效、安全和便捷,
是更為理想的方式。
5數據統計與分析
5.1數據準備
因為JupyterNotebook操作簡單方便,本次畢業設計選擇Jupyter
Notebook軟件進行數據準備。首先導入相關庫,使用pandas存儲在txt文件的
數據,選取部分字段,讀取前十條數據作為作為數據準備,核心實現代碼如下,
數據準備結果如圖5-1。
importpandasaspd
df=pd.read_csv(r'D:\pycharm\文件保存位置\python畢業設計\內地榜數
23
湖南商務職業技術學院畢業設計
據.txt',sep='\t',engine='python',encoding='utf_8_sig')
df.head(10)
圖5-1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論