爬取酷狗top500歌曲热度排名

您所在的位置:网站首页 酷狗的排行榜怎么看 爬取酷狗top500歌曲热度排名

爬取酷狗top500歌曲热度排名

2024-07-14 12:14:57| 来源: 网络整理| 查看: 265

一、主题式网络爬虫设计方案

1.主题式网络爬虫

爬取酷狗top500歌曲热度排名

2.主题式网络爬虫爬取的内容与数据特征分析

内容及数据特征分析:对酷狗TOP500上歌曲的热度排行做一个可视化表格,

主要是爬取酷狗音乐榜单酷狗TOP500的歌曲排名

3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)

实现思路:用requests库抓取页面信息,用BeautifulSoup库解析网页,创建excel存储数据进行数据分析

技术难点:excel的创建和相关系数散点图与建立回归方程

二、主题页面的结构特征分析

1.主题页面的结构与特征分析

搜索https://www.kugou.com/,打开主页,然后点击榜单找到榜单页面,如图所示

2.Htmls页面解析

3.节点(标签)查找方法与遍历方法

按“F12"打开网页源代码,如图所示

用find_all()方法进行遍历

三、网络爬虫程序设计

1.数据爬取与采集

爬取代码如下

复制代码 1 import requests 2 import time 3 import xlwt 4 from bs4 import BeautifulSoup 5 6 #创建Excel存储数据 7 class Spider: 8 def __init__(self): 9 self.workbook, self.worksheet = self.create_excel() 10 self.nums = 1 11 12 def create_excel(self): 13 workbook = xlwt.Workbook(encoding='utf-8') 14 worksheet = workbook.add_sheet('Sheet1') 15 title = ['排名', '歌手和歌名', '播放时间'] 16 for index, title_data in enumerate(title): 17 worksheet.write(0, index, title_data) 18 return workbook, worksheet 19 20 def get_html(self,url): 21 headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)', } # 爬虫请求头信息 22 response = requests.get(url, headers=headers) 23 if response.status_code == 200: # 如果请求状态值为200,则输出 24 return response.text 25 else: 26 return '产生异常' 27 28 29 def get_data(self,html): 30 soup = BeautifulSoup(html, 'lxml') # 用BeautifulSuop库解析网页 31 ranks = soup.find_all('span', class_='pc_temp_num') # 排名 32 names = soup.find_all('a', class_='pc_temp_songname') # 歌手和歌名 33 times = soup.find_all('span', class_='pc_temp_time') # 播放时间 34 35 # 打印信息 36 for r, n, t in zip(ranks, names, times): # 用zip函数 37 r = r.get_text().replace('\n', '').replace('\t', '').replace('\r', '') 38 n = n.get_text() 39 t = t.get_text().replace('\n', '').replace('\t', '').replace('\r', '') 40 data = {'排名': r, '歌名-歌手': n, '播放时间': t} 41 self.worksheet.write(self.nums, 0, str(r)) 42 self.worksheet.write(self.nums, 1, str(n)) 43 self.worksheet.write(self.nums, 2, str(t)) 44 self.nums += 1 45 46 def main(self,): 47 urls = ['https://www.kugou.com/yy/rank/home/{}-8888.html?from=rank'.format(str(i)) for i in range(1, 24)] # 用for循环 48 for url in urls: 49 print(url) 50 html = self.get_html(url) 51 self.get_data(html) 52 time.sleep(1) # 暂停1S 53 self.workbook.save('data.xls')#存入所有信息后保存为data.xls 54 55 56 if __name__ == '__main__': # 程序执行时调用主程序main() 57 spider = Spider() 58 spider.main() 复制代码

运行结果如图

2.对数据进行清洗和处理

输出数据文件的前5行

1 import pandas as pd 2 kugou=pd.DataFrame(pd.read_excel('data.xls')) 3 kugou.head()

 

 

 

   (1)删除无效行与列

1 import pandas as pd 2 kugou=pd.DataFrame(pd.read_excel('data.xls')) 3 kugou.head() 4 kugou.drop(1,axis=0,inplace=True) 5 kugou.head()

 

 

(2)重复值处理,索引判断词没有出现“True”

1 import pandas as pd 2 kugou=pd.DataFrame(pd.read_excel('data.xls')) 3 kugou.head() 4 kugou.duplicated()

 

 

(3)空值与缺失值处理

1 import pandas as pd 2 kugou=pd.DataFrame(pd.read_excel('data.xls')) 3 kugou.head() 4 kugou['播放时间'].isnull().value_counts()

 

 

(4)异常值处理

1 import pandas as pd 2 kugou=pd.DataFrame(pd.read_excel('data.xls')) 3 kugou.head() 4 kugou.describe()

 

 

 3.文本分析(可选):jieba分词、wordcloud的分词可视化

4.数据分析与可视化(例如:数据柱形图、直方图、散点图、盒图、分布图)

复制代码 1 import matplotlib 2 from matplotlib import pyplot 3 matplotlib.rcParams['font.sans-serif']=['SimHei'] 4 x = ['胡66-后来遇见他','海来阿木-点歌的人','皮卡丘多多-惊雷','傅如乔-微微','梦然-少年'] 5 y = [1,2,3,4,5] 6 pyplot.plot(x,y) 7 plt.xlabel("歌手和歌名") 8 plt.ylabel("排名") 9 plt.title('排名1-5音乐的播放歌手和歌名') 10 pyplot.show() 复制代码

 

复制代码 1 import matplotlib.pyplot as plt 2 plt.rcParams['font.family']=['sans-serif'] 3 plt.rcParams['font.sans-serif']=['SimHei'] 4 plt.bar(['胡66-后来遇见他','海来阿木-点歌的人','皮卡丘多多-惊雷','傅如乔-微微','梦然-少年'],[1,2,3,4,5]) 5 plt.legend() 6 plt.xlabel("歌手和歌名") 7 plt.ylabel("排名") 8 plt.title('排名1-5音乐的歌手和歌名') 9 pyplot.show() 复制代码

 

 

 

 

 

 

5.根据数据之间的关系,分析两个变量之间的相关系数,画出散点图,并建立变量之间的回归方程(一元或多元)

复制代码 1 import numpy as np 2 import pandas as pd 3 import sklearn 4 kugou_df=pd.read_excel('data.xls') 5 kugou_df.head() 6 from sklearn.linear_model import LinearRegression 7 X = kugou_df.drop("排名",axis=1) 8 predict_model = LinearRegression() 9 predict_model.fit(X,kugou_df['排名'])#训练模型 10 print("回归系数为:",predict_model.coef_)#判断相关性 复制代码 复制代码 1 import numpy as np 2 import pandas as pd 3 import seaborn as sns 4 kugou_df = pd.read_excel('data.xls') 5 kugou_df.columns 6 DataFrame=kugou_df[["排名","歌手和歌名","播放时间"]] 7 sns.regplot(kugou_df.排名,kugou_df.歌手和歌名) 复制代码

 

6.数据持久化

7.将以上各部分的代码汇总,附上完整程序代码

 

复制代码 1 import requests 2 import time 3 import xlwt 4 5 from bs4 import BeautifulSoup 6 7 #创建Excel存储数据 8 class Spider: 9 def __init__(self): 10 self.workbook, self.worksheet = self.create_excel() 11 self.nums = 1 12 13 def create_excel(self): 14 workbook = xlwt.Workbook(encoding='utf-8') 15 worksheet = workbook.add_sheet('Sheet1') 16 title = ['排名', '歌手和歌名', '播放时间'] 17 for index, title_data in enumerate(title): 18 worksheet.write(0, index, title_data) 19 return workbook, worksheet 20 21 def get_html(self,url): 22 headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)', } # 爬虫请求头信息 23 response = requests.get(url, headers=headers) 24 if response.status_code == 200: # 如果请求状态值为200,则输出 25 return response.text 26 else: 27 return '产生异常' 28 29 #获取数据 30 def get_data(self,html): 31 soup = BeautifulSoup(html, 'lxml') # 用BeautifulSuop库解析网页 32 ranks = soup.find_all('span', class_='pc_temp_num') # 排名 33 names = soup.find_all('a', class_='pc_temp_songname') # 歌手和歌名 34 times = soup.find_all('span', class_='pc_temp_time') # 播放时间 35 36 # 打印信息 37 for r, n, t in zip(ranks, names, times): # 用zip函数 38 r = r.get_text().replace('\n', '').replace('\t', '').replace('\r', '') 39 n = n.get_text() 40 t = t.get_text().replace('\n', '').replace('\t', '').replace('\r', '') 41 data = {'排名': r, '歌名-歌手': n, '播放时间': t} 42 self.worksheet.write(self.nums, 0, str(r)) 43 self.worksheet.write(self.nums, 1, str(n)) 44 self.worksheet.write(self.nums, 2, str(t)) 45 self.nums += 1 46 47 def main(self,): 48 urls = ['https://www.kugou.com/yy/rank/home/{}-8888.html?from=rank'.format(str(i)) for i in range(1, 24)] # 用for循环 49 for url in urls: 50 print(url) 51 html = self.get_html(url) 52 self.get_data(html) 53 time.sleep(1) # 暂停1S 54 self.workbook.save('data.xls') 55 56 57 if __name__ == '__main__': # 程序执行时调用主程序main() 58 spider = Spider() 59 spider.main() 60 61 #对数据进行清洗和处理 62 import pandas as pd 63 kugou=pd.DataFrame(pd.read_excel('data.xls')) 64 kugou.head()#输出数据文件的前5行 65 66 kugou.drop(1,axis=0,inplace=True)#删除无效行与列 67 68 kugou.duplicated()#缩影重复值处理 69 70 kugou['播放时间'].isnull().value_counts()#查找空值与缺失值处理 71 72 kugou.describe()#索引异常值处理 73 kugou.head() 74 75 #绘制图像 76 import matplotlib 77 from matplotlib import pyplot 78 matplotlib.rcParams['font.sans-serif']=['SimHei'] 79 x = ['胡66-后来遇见他','海来阿木-点歌的人','皮卡丘多多-惊雷','傅如乔-微微','梦然-少年'] 80 y = [1,2,3,4,5] 81 pyplot.plot(x,y) 82 plt.xlabel("歌手和歌名") 83 plt.ylabel("排名") 84 plt.title('排名1-5音乐的播放歌手和歌名') 85 pyplot.show() 86 87 import matplotlib.pyplot as plt 88 plt.rcParams['font.family']=['sans-serif'] 89 plt.rcParams['font.sans-serif']=['SimHei'] 90 plt.bar(['胡66-后来遇见他','海来阿木-点歌的人','皮卡丘多多-惊雷','傅如乔-微微','梦然-少年'],[1,2,3,4,5]) 91 plt.legend() 92 plt.xlabel("歌手和歌名") 93 plt.ylabel("排名") 94 plt.title('排名1-5音乐的歌手和歌名') 95 pyplot.show() 96 97 import seaborn as sns 98 file_path = "data.xls" 99 df = pd.read_excel(file_path,names=['排名','歌手和歌名','播放时间']) 100 sns.boxplot(x='播放时间',y='排名',data=df) 101 102 #分析相关系数 103 import numpy as np 104 import pandas as pd 105 import sklearn 106 kugou_df=pd.read_excel('data.xls') 107 kugou_df.head() 108 from sklearn.linear_model import LinearRegression 109 X = kugou_df.drop("排名",axis=1) 110 predict_model = LinearRegression() 111 predict_model.fit(X,kugou_df['排名'])#训练模型 112 print("回归系数为:",predict_model.coef_)#判断相关性 113 114 #绘制散点图,建立回归方程 115 import numpy as np 116 import pandas as pd 117 import seaborn as sns 118 kugou_df = pd.read_excel('data.xls') 119 kugou_df.columns 120 DataFrame=kugou_df[["排名","歌手和歌名","播放时间"]] 121 sns.regplot(kugou_df.排名,kugou_df.歌手和歌名) 复制代码

四、结论1.经过对主题数据的分析与可视化,可以得到哪些结论?

酷狗音乐TOP500的音乐热度非常高

排行榜上歌手多为网络歌手2.对本次程序设计任务完成的情况做一个简单的小结。

 本次程序让我跟了解了python,同时也让我知道了自己的不足



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭