Python爬虫爬取酷狗音乐TOP500

Python大作业


内容简介:

用Python来爬取酷狗音乐TOP500的歌曲信息,统计这500首歌曲中出现的所有歌手,并做可视化处理生成词云


实验代码:
import time
import requests
from bs4 import BeautifulSoup
import pandas as pd
from matplotlib import pyplot as plt
from wordcloud import WordCloud
from PIL import Image
import numpy as np


def main():
    dic = get_data()
    items = process_data(dic)
    print(len(items), items)
    word_cloud(items)


def get_data():
    dic = {}
    for i in range(1, 24):
        urls = 'https://www.kugou.com/yy/rank/home/%d-8888.html?from=rank' % i
        head = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                          "Chrome/92.0.4577.63 Safari/537.36}"}  # 表示告诉要访问的网站我们是什么浏览器
        html = requests.get(urls, headers=head)
        soup = BeautifulSoup(html.text, 'lxml')
        titles = soup.select('.pc_temp_songname')
        href = soup.select('.pc_temp_songname')
        times = soup.select('.pc_temp_time')
        data_all = []
        for titles, times, href in zip(titles, times, href):
            data = {
                # '排行': No.get_text().strip().replace('\n', '').replace('\t', '').replace('\r', ''),
                '歌曲名称': titles.get_text().replace('\n', '').replace('\t', '').replace('\r', '').split('-')[0],
                '歌手': titles.get_text().replace('\n', '').replace('\t', '').replace('\r', '').split('-')[1],
                '歌曲时长': times.get_text().strip().replace('\n', '').replace('\t', '').replace('\r', ''),
                '歌曲链接': href.get('href')}
            print(data)
            cnt_songer(data['歌手'], dic)
            data_all.append(data)
        # data_frame(data_all)
        time.sleep(2)
    return dic


# def data_frame(data_all):  # 将数据写入到酷狗TOP500的txt文档中
#     df = pd.DataFrame(index=["排行"], columns=["歌曲名称", "歌手", "歌曲时长", "歌曲链接"])
#     p = 1
#     for j in data_all:
#         df.loc[p] = j
#         p += 1
#         df.to_csv("酷狗TOP500.txt", sep='\t', index=True, header=True)


def cnt_songer(songer, dic):  # 词频统计:若字典中无当前词语则创建一个键值对,若有则将原有值加1
    if songer not in dic:
        dic[songer] = 1
    else:
        dic[songer] = dic[songer] + 1


def process_data(dic):  # 将无序的字典类型转换为有序的字典
    items = dict(sorted(dic.items(), key=lambda x: x[1], reverse=True))
    return items


def word_cloud(items):  # 可视化之词云
    img = Image.open(r'./tree.jpg')  # 图片样板
    imgarr = np.array(img)
    wc = WordCloud(
        background_color='white',
        mask=imgarr,
        font_path="C:\Windows\Fonts\msyh.ttc",
        scale=15
    )
    wc.generate_from_frequencies(items)
    plt.figure(1)
    plt.imshow(wc)
    plt.axis('off')
    plt.show()
    wc.to_file("酷狗TOP500词云.png")


if __name__ == '__main__':
    main()

最后生成的词云:

生成的词云图

词云样式:
tree.jpg

注:本次代码仅仅用来提交实验大作业,所以其中可能会有一些bug,代码的格式也可能不标准

  • 7
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Python爬虫酷狗音乐的步骤: 1. 分析酷狗音乐的网页结构,找到需要的数据所在的标签和类名。 2. 使用requests库发送HTTP请求,获酷狗音乐网页的HTML源代码。 3. 使用BeautifulSoup库解析HTML源代码,提出需要的数据。 4. 将数据保存到本地文件或数据库中。 下面是一个简单的示例代码,演示如何酷狗音乐的排行榜: ``` import requests from bs4 import BeautifulSoup # 设置请求头,模拟浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 发送HTTP请求,获HTML源代码 url = 'http://www.kugou.com/yy/rank/home/1-8888.html?from=rank' response = requests.get(url, headers=headers) html = response.text # 解析HTML源代码,提数据 soup = BeautifulSoup(html, 'html.parser') songs = soup.select('.pc_temp_songlist > ul > li') # 遍历歌曲列表,输出歌曲信息 for song in songs: rank = song.select('span.pc_temp_num')[0].text.strip() name = song.select('a')[0].text.strip() singer = song.select('a')[1].text.strip() album = song.select('a')[2].text.strip() print(rank, name, singer, album) ``` 上述代码中,我们使用了requests库发送HTTP请求,获酷狗音乐网页的HTML源代码。然后使用BeautifulSoup库解析HTML源代码,提出排行榜中每首歌曲的排名、歌曲名、歌手名和专辑名,并输出到控制台。 你可以将这些数据保存到本地文件或数据库中,以便后续分析和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值