前言
有温度 有深度 有广度 就等你来关注哦~
哈喽!我是栗子同学,爬虫部分小案例已经可以给大家写啦!
有小伙伴儿问我这么久都去哪儿了?
当然是学习新知识去啦,黑嘿嘿,很多爬虫的小案例小编已经会了哦!
今日主题:如果没有音乐,生活就是一个错误 :n首回味无穷的歌,总有曲深得你心啦!
所有文章完整的素材+源码都在👇👇
正文
某音乐网址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)爬虫主程序:
#导入相应的库文件
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.com/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.com/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、案例等)
(文章汇总还有更多你案例等你来学习啦~源码找我即可免费!)