返回

重现网易云音乐重合率 | 用Python爬虫分析音乐偏好

开发工具

网易云音乐的重合率功能风靡一时,但很多用户却苦于无法查询与他人音乐偏好的重合度。本文将介绍如何使用Python爬虫从网易云音乐中提取数据,并计算出你和另一位用户的音乐重合率。

引言

音乐是连接人们情感的强大力量。随着流媒体音乐平台的兴起,分享音乐偏好变得比以往任何时候都更加容易。网易云音乐作为中国最流行的流媒体平台之一,拥有庞大的用户群和丰富的音乐库。该平台的一个受欢迎的功能是“重合率”,它允许用户查看自己与其他用户喜欢的音乐的重合程度。

但是,网易云音乐并没有提供一种方法来计算与不在平台上的人的音乐重合率。本文将介绍如何使用Python爬虫从网易云音乐中提取数据,并计算出你和另一位用户的音乐重合率。

数据收集

第一步是收集数据。为此,我们将使用Python的BeautifulSoup和Requests库从网易云音乐中提取数据。BeautifulSoup是一个解析HTML的库,而Requests是一个HTTP库。

import requests
from bs4 import BeautifulSoup

# 用户的网易云音乐用户名
user_name = "your_username"

# 获取用户的歌单列表
url = f"https://music.163.com/playlist?order=hot&limit=100&uid={user_name}"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 提取歌单信息
playlists = soup.find_all("a", class_="msk")
playlist_ids = [playlist["href"].split("/")[-1] for playlist in playlists]

数据处理

收集到数据后,我们需要提取歌曲信息。我们将使用Pandas库来处理数据。Pandas是一个用于数据分析和操作的库。

import pandas as pd

# 创建一个空的DataFrame来存储歌曲信息
songs = pd.DataFrame()

# 遍历歌单列表
for playlist_id in playlist_ids:
    # 获取歌单中的歌曲列表
    url = f"https://music.163.com/playlist?id={playlist_id}"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")

    # 提取歌曲信息
    tracks = soup.find_all("a", class_="tit s-fc0")
    track_names = [track.text for track in tracks]
    track_ids = [track["href"].split("/")[-1] for track in tracks]

    # 将歌曲信息添加到DataFrame中
    songs = pd.concat([songs, pd.DataFrame({
        "playlist_id": playlist_id,
        "track_name": track_names,
        "track_id": track_ids
    })], ignore_index=True)

计算重合率

接下来,我们需要计算你与另一位用户的音乐重合率。我们将使用集合运算来计算重合度。集合运算是一种数学运算,用于计算两个集合之间的重叠元素。

# 你的网易云音乐用户名
your_name = "your_username"

# 另一位用户的网易云音乐用户名
other_name = "other_username"

# 获取你的歌单数据
your_songs = songs[songs["playlist_id"].isin(playlist_ids)]

# 获取另一位用户的歌单数据
other_songs = songs[songs["playlist_id"].isin(other_playlist_ids)]

# 计算重合度
overlap = set(your_songs["track_id"]).intersection(set(other_songs["track_id"]))
overlap_count = len(overlap)

# 计算重合率
overlap_rate = overlap_count / len(set(your_songs["track_id"])) * 100

输出结果

最后,我们将输出结果。

print(f"你和{other_name}的音乐重合率为:{overlap_rate:.2f}%")

结束语

本文介绍了如何使用Python爬虫从网易云音乐中提取数据,并计算出你和另一位用户的音乐重合率。这个项目展示了如何使用BeautifulSoup、Requests和Pandas库进行网络抓取和数据分析。