首頁  >  文章  >  後端開發  >  Python中的爬蟲實戰:酷我音樂爬蟲

Python中的爬蟲實戰:酷我音樂爬蟲

王林
王林原創
2023-06-09 23:43:353169瀏覽

在網路的時代,資訊變得異常重要,資料成為價值的基石之一,而網路爬蟲則是取得和處理資料的重要工具之一。 Python語言由於其簡單易學、高效的特點,成為許多爬蟲程式設計師的首選程式語言。在本文中,我們將透過一個實戰案例,使用Python語言來爬取酷我音樂網站的數據,並進行數據分析和處理。

酷我音樂是國內較知名的音樂播放器之一,其擁有大量的音樂資源和使用者群體。我們將以酷我音樂網站為例,介紹爬取資料的具體實作過程。

一、資料分析

在進行爬取之前,我們首先需要分析目標網站的網頁結構和資料儲存方式。透過開啟酷我音樂的網頁,可以發現其網頁位址與音樂的ID有著明顯的關聯性,在網頁位址後面加上「/song/」和音樂的ID即可存取對應音樂的詳細頁面。

打開一首音樂的詳細頁面,發現其中有許多有價值的數據,包括歌曲名稱、歌手、專輯、歌曲長度、播放量、評論數等等。而這些資訊則以網頁標籤形式保存在HTML檔案中。透過檢視頁面原始碼,可以發現相關資訊大多藏在class為「_​​_songinfo__」和「__detailed_info clearfix__」的標籤中。

二、爬蟲實現

爬蟲的核心是爬取數據,我們將數據爬取和保存分別實現。

  1. 資料爬取

我們需要定義一個函數,接收包含音樂ID的列表,存取對應音樂的頁面並爬取其中有用的信息。具體實作如下:

import requests
from bs4 import BeautifulSoup

def get_music_info(musicids):
    musicinfo = []
    for musicid in musicids:
        url = 'http://www.kuwo.cn/play_detail/' + str(musicid)
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
        response = requests.get(url, headers=headers)
        response.encoding = response.apparent_encoding
        soup = BeautifulSoup(response.text, 'html.parser')

        music_title = soup.find('h1', class_='info_tit').text.strip() # 歌曲名称
        artist = soup.find('p', class_='name').text.strip() # 歌手
        album = soup.find('a', class_='sname').text.strip() # 专辑
        duration = soup.find('span', class_='hilight').text.strip() # 歌曲时长
        play_counts = soup.find('em', class_='num').text.strip() # 播放量
        comments_counts = soup.find('em', class_='sub').text.strip() # 评论数

        musicinfo.append([musicid, music_title, artist, album, duration, play_counts, comments_counts])
        print('正在爬取音乐《{}》信息'.format(music_title))
    return musicinfo

以上程式碼使用requests函式庫和BeautifulSoup函式庫請求網頁並解析HTML文件,取得有用的標籤資訊。其中,headers為模擬Chrome瀏覽器存取的偽裝頭部,防止被伺服器屏蔽。

2.資料保存

我們將爬取到的資料儲存為CSV格式,在使用前需要先匯入CSV庫:

import csv

然後,我們需要定義一個保存資料的函數,將爬取到的音樂訊息,按照CSV格式正確的形式保存到本地文件中,具體實現如下:

def save_csv(save_path, data_list):
    with open(save_path, 'w', newline='') as f:
        writer = csv.writer(f)
        writer.writerow(['歌曲ID', '歌曲名称', '歌手', '专辑', '歌曲时长', '播放量', '评论数'])
        writer.writerows(data_list)
    print("数据已保存至{}".format(save_path))

以上代碼使用CSV庫中的writer()方法,將音樂資訊寫入文件。要注意的是,CSV檔案中的檔案分隔符號為逗號,寫入檔案時,需要使用newline=''修復行之間的空白行。

三、資料分析

完成資料爬取和保存後,我們可以開始對資料進行分析和處理。在Python語言中, pandas和matplotlib等函式庫能夠方便地實現資料分析和視覺化。

1.導入庫

資料分析主要使用pandas和matplotlib函式庫,因此,我們需要使用以下程式碼導入相關函式庫:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

2.讀取檔案

我們可以使用pandas函式庫中的read_csv()函數,將已儲存的CSV檔案讀取到DataFrame中,具體實作如下:

music_data = pd.read_csv('music_data.csv')

3.資料篩選與排序

#我們可以使用pandas中的sort_values()方法,依照播放量play_counts對資料進行降序排列,並使用head()方法,只保留前20個資料。

top_20_play_counts = music_data.sort_values('播放量', ascending=False).head(20)

4.資料視覺化

使用matplotlib函式庫實作資料視覺化,才能更清晰的了解資料之間的關係和趨勢。我們可以使用以下程式碼,繪製出酷我音樂播放量排名前20的音樂曲線圖。

plt.figure(figsize=(20, 8)) # 设置图像大小
sns.lineplot(x='歌曲名称', y='播放量', data=top_20_play_counts) # 绘制曲线图
plt.xticks(rotation=90, fontsize=14) # 调整x轴刻度大小和旋转角度
plt.yticks(fontsize=14) # 调整y轴刻度大小
plt.xlabel('歌曲名称', fontsize=16) # 坐标轴标题
plt.ylabel('播放量', fontsize=16)
plt.title('酷我音乐播放量排名前20的歌曲', fontsize=20) # 图像标题
plt.show() # 显示图像

透過以上程式碼,我們可以更直觀地了解酷我音樂播放量排名前20的歌曲的播放量趨勢。

四、總結

本文透過一個實際案例,詳細地講述了Python語言在爬蟲實戰中的使用。透過分析網頁結構和資料儲存方式,並使用requests和BeautifulSoup庫進行資料爬取,最終使用pandas和matplotlib庫進行資料分析和視覺化。希望能夠在實踐中,更好的了解Python語言在爬蟲領域的應用。

以上是Python中的爬蟲實戰:酷我音樂爬蟲的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn