• 【Python实战】如果没有音乐,生活就是一个错误 :n首回味无穷的歌,总有一曲深得你心哦~


    前言

    有温度 有深度 有广度   就等你来关注哦~

     

      哈喽!我是栗子同学,爬虫部分小案例已经可以给大家写啦!

    有小伙伴儿问我这么久都去哪儿了?

    当然是学习新知识去啦,黑嘿嘿,很多爬虫的小案例小编已经会了哦!

    今日主题:如果没有音乐,生活就是一个错误 :n首回味无穷的歌,总有曲深得你心啦!

    所有文章完整的素材+源码都在👇👇

    粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。

    正文

    某音乐网址TOP500榜单:https://www.kugou.com/yy/rank/home/1-8888.html?from=rank

    一、运行环境

    1)Python环境

    环境: Python 3 、Pycharm、requests 、bs4 。 其他内置模块,安装 好python环境就可以了。

    (win + R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安 装速度比较慢, 你可以切

    换国内镜像源)) 

     第三方库的安装:pip install + 模块名 或者 带镜像源 pip install -i https://pypi.douban.com/simple/ +模块名 

    2)爬取思路

    (1)确认要爬取的网页内容

    (2)查询网页版酷狗可以发现,并没有手动翻页浏览的地方,但是通过观察第一页的url:

    https://www.kugou.com/yy/rank/home/1-8888.html?from=rank

    可以发现,只要改变链接中1-8888中的1变成2,再进行浏览如下图所示:

    进行多次尝试后,发现更换不同数字就可以得到不同的页面,因此只需要更改home后面1-8888中

    的1作为页面数字就可以看到不同的页面。由于每页显示为22首歌曲,所以总共需要23个url。如下

    图所示:

    从上图可以看到第23页正好可以显示到TOP500的歌曲数据。

    (3)确认需要爬取的信息有排名、歌曲、歌手和歌曲时间,如下图:

    二、代码实现

    1)爬虫主程序:

    1. #导入相应的库文件
    2. import requests
    3. from bs4 import BeautifulSoup
    4. import time
    5. #加入请求头
    6. headers={
    7. "User-Agent": "xxx"
    8. }
    9. #定义获取信息函数
    10. def get_info(url):
    11. #通过请求头和url链接,得到整体网页页面信息
    12. web_data=requests.get(url,headers=headers)
    13. #对返回的结果进行解析
    14. soup=BeautifulSoup(web_data.text,'lxml')
    15. #找到具体的相同的数据的内容位置和内容
    16. ranks = soup.select('span.pc_temp_num')
    17. titles = soup.select('div.pc_temp_songlist > ul > li > a')
    18. times = soup.select('span.pc_temp_tips_r > span')
    19. #提取具体的文字内容
    20. for rank, title, time in zip(ranks, titles, times):
    21. data = {
    22. 'rank': rank.get_text().strip(),
    23. 'singer': title.get_text().split('-')[0],
    24. 'song': title.get_text().split('-')[1],
    25. 'time': time.get_text().strip()
    26. }
    27. print(data)
    28. #程序入口
    29. if __name__=='__main__':
    30. urls = ['https://www.kugou.com/yy/rank/home/{}-8888.html?from=rank'.format(i) for i in range(1, 2)]
    31. for url in urls:
    32. get_info(url)
    33. time.sleep(1)

    2)实现效果:

    3)数据清洗保存

    针对爬取的结果,是字典的形式,同时有的输出如:singer对应的输出还含有很多制表符,因此,

    必须进行数据清洗,然后再进行保存,才能更好的为后续数据分析做好准备,代码如下:​​​​​

    1. #包含整体和清洗和保存代码如下
    2. import requests
    3. from bs4 import BeautifulSoup
    4. import time
    5. import xlwt
    6. headers={
    7. "User-Agent": "xxx"
    8. }
    9. def get_info(url):
    10. data=[]
    11. #通过请求头和链接,得到网页页面整体信息
    12. web_data=requests.get(url,headers=headers)
    13. #print(web_data.text)
    14. #对返回的结果进行解析
    15. soup=BeautifulSoup(web_data.text,'lxml')
    16. #print(soup)
    17. #找到具体的相同的数据的内容位置和内容
    18. ranks = soup.select('span.pc_temp_num')
    19. titles = soup.select('div.pc_temp_songlist > ul > li > a')
    20. times = soup.select('span.pc_temp_tips_r > span')
    21. #提取具体的文字内容
    22. for rank, title, time in zip(ranks, titles, times):
    23. datadict = {
    24. 'rank': rank.get_text().strip(),
    25. 'singer': title.get_text().split('-')[0],
    26. 'song': title.get_text().split('-')[1],
    27. 'time': time.get_text().strip()
    28. }
    29. data_total.append(datadict)
    30. def get_data_save(df):
    31. #数据清洗
    32. for i in range(len(df)):
    33. df_list = []
    34. rank=df[i]['rank']
    35. singer=df[i]['singer'].strip()
    36. song=df[i]['song'].strip()
    37. time=df[i]['time']
    38. df_list.append(rank)
    39. df_list.append(singer)
    40. df_list.append(song)
    41. df_list.append(time)
    42. data.append(df_list)
    43. #数据保存成excel
    44. head = ['rank', 'title', 'user', 'time'] # 定义表头
    45. book = xlwt.Workbook(encoding='utf-8') # 创建工作簿
    46. sheet_name = book.add_sheet('酷狗TOP500') # 创建工作表
    47. # 写入表头数据
    48. for h in range(len(head)):
    49. sheet_name.write(0, h, head[h])
    50. row = 1
    51. data_len = len(data)
    52. for i in range(data_len):
    53. for j in range(len(head)):
    54. sheet_name.write(row, j, data[i][j])
    55. row += 1
    56. book.save('酷狗TOP500.xls')
    57. if __name__=='__main__':
    58. urls = ['https://www.kugou.com/yy/rank/home/{}-8888.html?from=rank'.format(i) for i in range(1, 24)]
    59. data_total = []
    60. for url in urls:
    61. get_info(url)
    62. data=[]
    63. get_data_save(data_total)
    64. time.sleep(1)

    4)数据可视化分析

    对于已经爬取的数据已经保存成了excel,可以进行数据分析了,数据量小可以直接通过excel进行

    透视或者可视化分析,如果数据量较大,可以通过python进行数据分析,也可以通过python进行可

    视化的呈现。

    此次酷狗Top500数据维度较少,只有排名、歌曲、歌手、时间4个维度,可以尝试去了解TOP歌曲

    一般时长是多少,上榜最多的歌手是谁等等。

    (1)按照每分钟一个区间,统计歌曲的时长分布如下:

    可以很明显的看到,时间在3分钟的上榜歌曲数量最多:238个,4分钟的歌曲数量排名第二:168

    个,3-4分钟歌曲数占:81.2%;视乎结论是3分钟的歌曲比较适合,但是不妨将时间粒度再切细一

    点,看看是否会有什么不同。

    (2)按照半分钟一个分段,统计歌曲的时长分布如下:

    按照更细粒度的30秒进行切分,TOP500的歌曲时间主要都集中在3分30秒至4分30秒之间,占

    top50歌曲比:50%;

    (3)最后也顺便看一下,TOP500里面上榜最多的三位歌手是谁?

    排名

    歌手

    歌曲数

    1

    周杰伦

    34

    2

    林俊杰

    13

    3

    G.E.M.邓紫棋

    8

    总结

    好啦!本文些到这里就正式结束了,想学习更多的爬虫案例记得关注我,不迷路啦~

    ✨完整的素材源码等:可以滴滴我吖!或者点击文末hao自取免费拿的哈~

    🔨推荐往期文章——

    项目0.2 【Python实战】WIFI密码小工具,甩万能钥匙十条街,WIFI任意连哦~(附源码)

    项目0.3 【Python实战】再分享一款商品秒杀小工具,我已经把压箱底的宝贝拿出来啦~

    项目0.4  【Python爬虫】过来人告诉你:为什么找工作抓住这个细节,能少踩很多坑哦~(招聘网站实战)

    项目0.1 【Python抢票神器】火车票枪票软件到底靠谱吗?实测—终极攻略。

    🎁文章汇总——

    Python文章合集 | (入门到实战、游戏、Turtle、案例等)

    (文章汇总还有更多你案例等你来学习啦~源码找我即可免费!)

  • 相关阅读:
    某头部证券机构云化与信创双转型深度解析|信创专题
    OpenApi-Generator:简化RESTful API开发流程
    elementui 更换主题色
    说说switch关键字
    为什么简历上不要轻易写“精通分布式”,一线大厂为什么面试必问分布式?
    《Linux进程控制》
    【3D建模制作技巧分享】zbrush贴图映射小技巧
    Visual Studio 2022安装教程及创建窗体应用程序介绍
    python多线程使用MySQL导致中断连接重写mysql操作类
    【二叉树:1】二叉树的遍历、查找以及删除操作(Java编写)
  • 原文地址:https://blog.csdn.net/xy258009/article/details/127817566