admin管理员组

文章数量:1637858

前言

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

 

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

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

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

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

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

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

正文

某音乐网址TOP500榜单:https://www.kugou/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/simple/ +模块名 

2)爬取思路

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

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

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

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

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

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

图所示:

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

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

二、代码实现

1)爬虫主程序:

#导入相应的库文件
import requests
from bs4 import BeautifulSoup
import time

#加入请求头
headers={
"User-Agent": "xxx"
}

#定义获取信息函数
def get_info(url):
#通过请求头和url链接,得到整体网页页面信息
   web_data=requests.get(url,headers=headers)
#对返回的结果进行解析
   soup=BeautifulSoup(web_data.text,'lxml')
#找到具体的相同的数据的内容位置和内容
   ranks = soup.select('span.pc_temp_num')
   titles = soup.select('div.pc_temp_songlist > ul > li > a')
   times = soup.select('span.pc_temp_tips_r > span')
#提取具体的文字内容
for rank, title, time in zip(ranks, titles, times):
       data = {
'rank': rank.get_text().strip(),
'singer': title.get_text().split('-')[0],
'song': title.get_text().split('-')[1],
'time': time.get_text().strip()
       }
       print(data)

#程序入口
if __name__=='__main__':
   urls = ['https://www.kugou/yy/rank/home/{}-8888.html?from=rank'.format(i) for i in range(1, 2)]
for url in urls:
       get_info(url)
   time.sleep(1)

2)实现效果:

3)数据清洗保存

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

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

#包含整体和清洗和保存代码如下
import requests
from bs4 import BeautifulSoup
import time
import xlwt

headers={
"User-Agent": "xxx"
}

def get_info(url):
   data=[]
#通过请求头和链接,得到网页页面整体信息
   web_data=requests.get(url,headers=headers)
#print(web_data.text)
#对返回的结果进行解析
   soup=BeautifulSoup(web_data.text,'lxml')
#print(soup)
#找到具体的相同的数据的内容位置和内容
   ranks = soup.select('span.pc_temp_num')
   titles = soup.select('div.pc_temp_songlist > ul > li > a')
   times = soup.select('span.pc_temp_tips_r > span')
#提取具体的文字内容
for rank, title, time in zip(ranks, titles, times):
       datadict = {
'rank': rank.get_text().strip(),
'singer': title.get_text().split('-')[0],
'song': title.get_text().split('-')[1],
'time': time.get_text().strip()
       }
       data_total.append(datadict)

def get_data_save(df):
#数据清洗
for i in range(len(df)):
       df_list = []
       rank=df[i]['rank']
       singer=df[i]['singer'].strip()
       song=df[i]['song'].strip()
       time=df[i]['time']
       df_list.append(rank)
       df_list.append(singer)
       df_list.append(song)
       df_list.append(time)
       data.append(df_list)

#数据保存成excel
   head = ['rank', 'title', 'user', 'time']  # 定义表头
   book = xlwt.Workbook(encoding='utf-8')  # 创建工作簿
   sheet_name = book.add_sheet('酷狗TOP500')  # 创建工作表
# 写入表头数据
for h in range(len(head)):
       sheet_name.write(0, h, head[h])
   row = 1
   data_len = len(data)
for i in range(data_len):
for j in range(len(head)):
           sheet_name.write(row, j, data[i][j])
       row += 1
   book.save('酷狗TOP500.xls')

if __name__=='__main__':
   urls = ['https://www.kugou/yy/rank/home/{}-8888.html?from=rank'.format(i) for i in range(1, 24)]
   data_total = []
for url in urls:
       get_info(url)
   data=[]
   get_data_save(data_total)
   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、案例等)

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

本文标签: 如果没有的歌回味无穷一曲你心