最近Cloud Studio 非常火,我也去试了一下,感觉真的非常方便!我就以Python爬取B站各区排名前一百的视频,并作可视化来给大家分享一下Cloud Studio !应用链接:Cloud Studio实战——B站热门视频Top100爬虫应用开发
@[TOC]
一、腾讯云Cloud介绍 点开一个工作台,选择一个环节,即可在里面编辑代码,不用再担心本地环境不兼容的问题。腾讯云Cloud Studio是一种基于云的开发环境,可以帮助开发人员更高效地进行软件开发和协作。它提供了一个集成开发环境(IDE),可以在任何地方通过互联网访问,无需在本地安装任何软件。
腾讯云Cloud Studio的优势我总结为:
灵活性:Cloud Studio可以在任何设备上使用,只需一个支持Web浏览器的设备即可。这使开发人员可以随时随地访问他们的开发环境,无论是在办公室、家中还是旅途中。
资源可扩展性:Cloud Studio在云端运行,可以根据需要动态调整计算和存储资源。这意味着开发人员可以根据项目需求灵活地扩展或缩减资源,而无需关注硬件设备的限制。
协作能力:Cloud Studio支持多人协作开发,多个开发人员可以在同一个开发环境中同时工作。这样可以提高团队的协作效率,减少代码冲突和合并的问题。
安全性:腾讯云提供了严格的安全措施来保护用户的数据和开发环境。Cloud Studio使用安全的传输协议,并提供数据加密和访问控制等功能,确保用户的代码和数据得到保护。
生态系统整合:Cloud Studio与腾讯云的其他服务紧密集成,如云服务器、对象存储、数据库等。这使得开发人员可以方便地使用这些服务来构建和部署应用程序。
在我看来,腾讯云Cloud Studio提供了一个灵活、可扩展、安全和协作的开发环境,使开发人员能够更加高效地进行软件开发和协作。
二、 B站爬虫 B站,全称哔哩哔哩动画,是中国知名的在线视频分享平台,也是全球最大的二次元文化社区之一。B站以动画、漫画、游戏(ACG)为主题,为用户提供高质量的原创动画、弹幕评论、直播互动和社区交流等服务。作为一个年轻人喜爱的文化社区,B站汇集了大量的ACG内容创作者和粉丝,形成了独特的二次元文化氛围。通过B站,用户可以畅享各种精彩的动画作品、参与互动的直播活动,并与志同道合的人分享兴趣爱好、交流心得。
2.1爬虫代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 import requests import pandas as pd url_dict = { '全站': 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all', '动画': 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=1&type=all', '生活': 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=160&type=all', '动物圈': 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=217&type=all', '娱乐': 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=5&type=all', '影视': 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=181&type=all', '原创': 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=origin', } headers = { 'Accept': 'application/json, text/plain, */*', 'Origin': 'https://www.bilibili.com', 'Host': 'api.bilibili.com', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Safari/605.1.15', 'Accept-Language': 'zh-cn', 'Connection': 'keep-alive', 'Referer': 'https://www.bilibili.com/v/popular/rank/all' } for i in url_dict.items(): url = i[1] # url地址 tab_name = i[0] # tab页名称 title_list = [] play_cnt_list = [] # 播放数 danmu_cnt_list = [] # 播放数 coin_cnt_list = [] # 投币数 like_cnt_list = [] # 点赞数 dislike_cnt_list = [] # 点踩数 share_cnt_list = [] # 分享数 favorite_cnt_list = [] # 收藏数 author_list = [] score_list = [] video_url = [] try: r = requests.get(url, headers=headers) print(r.status_code) # pprint(r.content.decode('utf-8')) # r.encoding = 'utf-8' # pprint(r.json()) json_data = r.json() list_data = json_data['data']['list'] for data in list_data: title_list.append(data['title']) play_cnt_list.append(data['stat']['view']) danmu_cnt_list.append(data['stat']['danmaku']) coin_cnt_list.append(data['stat']['coin']) like_cnt_list.append(data['stat']['like']) dislike_cnt_list.append(data['stat']['dislike']) share_cnt_list.append(data['stat']['share']) favorite_cnt_list.append(data['stat']['favorite']) author_list.append(data['owner']['name']) score_list.append(data['score']) video_url.append('https://www.bilibili.com/video/' + data['bvid']) print('*' * 30) except Exception as e: print("爬取失败:{}".format(str(e))) df = pd.DataFrame( {'视频标题': title_list, '视频地址': video_url, '作者': author_list, '综合得分': score_list, '播放数': play_cnt_list, '弹幕数': danmu_cnt_list, '投币数': coin_cnt_list, '点赞数': like_cnt_list, '点踩数': dislike_cnt_list, '分享数': share_cnt_list, '收藏数': favorite_cnt_list, }) df.to_csv('B站TOP100-{}.csv'.format(tab_name), encoding='utf_8_sig') # utf_8_sig修复乱码问题 print('写入成功: ' + 'B站TOP100-{}.csv'.format(tab_name))
2.2爬虫结果
得到的是一个总站、六个分区的热门视频内容,存储在csv文件中。一共七个csv文件。打开全站文件可以看到:
csv文件中存储这当前区的视频标题,地址、作者、播放数、弹幕数、投币数等信息,可以利用这些数据进行数据处理操作。
三、数据可视化部分 3.1主站分析饼状图 3.1.1主站分析饼状图代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 import pandas as pd import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False # 全站饼状图 Total_station = pd.read_csv("B站TOP100-全站.csv") num_dic = {} # play_num = Total_station["播放数"] barrage_num = Total_station["弹幕数"] coin_num = Total_station["投币数"] like_num = Total_station["点赞数"] share_num = Total_station["分享数"] collection_num = Total_station["收藏数"] # num_dic["播放数"] = sum(play_num) num_dic["弹幕数"] = sum(barrage_num) num_dic["投币数"] = sum(coin_num) num_dic["点赞数"] = sum(like_num) num_dic["分享数"] = sum(share_num) num_dic["收藏数"] = sum(collection_num) Num = sum(num_dic.values()) # 单个数据 data = list(num_dic.values()) # 数据标签 labels = list(num_dic.keys()) # 各区域颜色 colors = ['green', 'orange', 'red', 'purple', 'blue'] # 数据计算处理 sizes = [data[0] / Num * 100, data[1] / Num * 100, data[2] / Num * 100, data[3] / Num * 100, data[4] / Num * 100] # 设置突出模块偏移值 expodes = (0, 0, 0, 0.1, 0) # 设置绘图属性并绘图 plt.pie(sizes, explode=expodes, labels=labels,shadow=True,autopct="%3.1f%%", colors=colors) ## 用于显示为一个长宽相等的饼图 plt.axis('equal') plt.title("主站分析饼状图",fontsize=20) # 保存并显示 plt.savefig('主站分析饼状图.png') plt.show()
3.1.2主站分析饼状图结果
3.2各站对比垂直图 3.2.1各站对比垂直图代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 import pandas as pd import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False all_list =['视频标题','视频地址','作者','综合得分','播放数','弹幕数','投币数','点赞数','点踩数','分享数','收藏数'] all_dic = {} Total_station = pd.read_csv("B站TOP100-全站.csv") animal = pd.read_csv("B站TOP100-动物圈.csv") animation = pd.read_csv("B站TOP100-动画.csv") original = pd.read_csv("B站TOP100-原创.csv") entertainment = pd.read_csv("B站TOP100-娱乐.csv") film_television = pd.read_csv("B站TOP100-影视.csv") life = pd.read_csv("B站TOP100-生活.csv") # all_dic["全站"] = sum(Total_station["播放数"]) # 垂直各站对比图 all_dic["动物圈"] = sum(animal["播放数"]) all_dic["动画"] = sum(animation["播放数"]) all_dic["原创"] = sum(original["播放数"]) all_dic["娱乐"] = sum(entertainment["播放数"]) all_dic["影视"] = sum(film_television["播放数"]) all_dic["生活"] = sum(life["播放数"]) y1 = list(all_dic.values()) x = np.arange(len(y1)) plt.bar(x=x,height=y1,width=0.4) a = [0,1,2,3,4,5] labels = ['动物圈', '动画', '原创', '娱乐','影视','生活'] plt.xticks(a,labels,rotation = 10) plt.xlabel('不同区名称',fontsize=10) plt.ylabel('播放总数',fontsize=10) plt.title("不同区前一百播放总数对比",fontsize=20) plt.savefig("垂直各站对比图.jpg", dpi=300) # plt.show()
3.2.2各站对比垂直图结果
3.3词云分析 3.3.1词云分析代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import wordcloud as wc import jieba from PIL import Image import numpy as np import matplotlib.pyplot as plt import pandas as pd Total_station = pd.read_csv("B站TOP100-全站.csv") f = open('temp.txt',mode='w') title = Total_station["视频标题"][:5:] author = Total_station["作者"] for i in title: f.write(i) # write 写入 #关闭文件 for i in author: f.write(i) # write 写入 f.close() with open("temp.txt", mode="r", encoding="GBK") as fp: content = fp.read() # 读取文件内容 res = jieba.lcut(content) # 中文分词 text = " ".join(res) # 用空格连接所有的词 mask = np.array(Image.open("背景.jpg")) # 指定词云图效果 word_cloud = wc.WordCloud(font_path="msyh.ttc", mask=mask) # 创建词云对象 word_cloud.generate(text) # 生成词语 plt.imshow(word_cloud) # 显示词云图 word_cloud.to_file("词云分析.png") # 保存成图片 plt.show() # 显示图片2.4.2词云分析结果
四、代码讲解 4.1爬虫
首先那么需要在那么自己电脑上安装request和pandas库,如果你们是anaconda环境的话,它应该自己自带这两个库,不用再另外安装,没有这两个库的话,要自行安装,对应教程可以上CSDN或者B站里面找一找,教程很多,跟着他后面做就能安装上。
url_dict ={}是定义了一个字典,这个字典的键就是分区的名字,值就是对应的url,你也可以理解为它的网址。
Headers就是起到一个隐藏自己的作用,你在本地pycharm去爬浏览器,如果不加这个headers的话,浏览器很容易就能判断出你是一个爬虫,就把你拒之门外了。这个headers就相当于穿了一个外套,或者你也可以理解为拿到了一个浏览器认可的身份证。有了这个包装,你才可以顺利的去爬取指定的浏览器。
接下来一个for循环,ur l_dict就是我们上面定义的字典,ur l_dict.items()就是获取它的所有键和值。url即为i[1],tab_name = i[0]。
try – except:用于捕获异常,防止爬虫过程中出现异常,这段指令可以让程序更加健壮。
try里面的内容是整个爬虫的核心:r = requests.get(url, headers=headers)+ json_data = r.json()是获取目标网站的信息,返回的是一个键和值关联的嵌套字典
list_data = json_data[‘data’][‘list’]是获取键为data的字典里面键为list的值,返回的是一个列表。 用for循环遍历list_data,将对应数据加到对应列表中,这里涉及到的知识点是列表、字典的索引,以及嵌套字典嵌套列表的索引。 df = pd.DataFrame将对应字典转化为DataFrame格式,方便之后写入csv文件中。 最后利用df.to_csv将数据写入csv文件中,utf_8_sig修复乱码问题。再给个提示语句,提示写入完成。
4.2主站分析饼状图
首先通过pandas读取文件,将弹幕数、投币数、点赞数、分享数、收藏数依次用变量存储起来。
利用字典将变量与对应变量和一一对应,总和即为data = list(num_dic.values()),数据标签为labels = list(num_dic.keys())。在设置一个颜色列表colors = [‘green’, ‘orange’, ‘red’, ‘purple’, ‘blue’]。
数据计算处理,即求出每一部分占总体的多少,expodes设置模块偏移量。
plt.pie是用来绘制饼图,在这个函数里面添加数据、标签、颜色等信息。
再整个图片上添加标题,最后将图片保存后显示出来。
4.3各站对比垂直图
首先读取各分区的数据,提取不同分区的播放数据,求总和作为该分区的热度。
垂直对比图用plt.bar来绘制,需要两个基本参数,x和y。x即为不同分区的名称,y即为上面求的热度值。
利用plt.xlabel、plt.ylabel、plt.title分别添加x,y轴的标题和整张图片标题,最后将图片保存后显示出来。
4.4词云分析
首先你要安装这些依赖库:
同样,我们读取全站的数据,title = Total_station[“视频标题”][:5:]读取热度排名前五的标题,author = Total_station[“作者”]读取所有热门作者。
with open(“temp.txt”, mode=”r”, encoding=”GBK”) as fp:打开temp文件,如果不存在的话就新建,利用for循环将标题和作者信息输入到temp文件中,并最后关闭文件。
res = jieba.lcut(content)利用jieba分词器进行中文分词,并用空格连接所有词。
mask = np.array(Image.open(“背景.jpg”))指定词云图效果,之后创建词云对象,生成词语并显示词云图。
最后保存片并显示。
五、Cloud Studio总结 通过使用腾讯云Cloud Studio,我成功地开发了一个应用程序,用于爬取B站视频数据并进行可视化分析。这个应用程序具有以下几个关键特点:
灵活性和便利性:使用Cloud Studio,我可以随时随地访问我的开发环境,无需担心设备和软件的限制。这使得开发过程更加灵活和便利。
数据爬取:通过调用B站的API接口,我能够获取到所需的视频数据,包括视频标题、播放量、点赞数等。这为后续的可视化分析提供了数据基础。
可视化分析:我使用Python的数据分析和可视化库,对爬取到的B站视频数据进行处理和分析。通过绘制图表和图形,我能够更直观地展示视频数据的趋势、热门内容和用户喜好等。
实时更新:借助Cloud Studio的云端环境,我可以定期运行我的应用程序,实时获取最新的B站视频数据并更新可视化结果。这使得我的应用程序始终保持最新和准确的数据。
总的来说,腾讯云Cloud Studio为我提供了一个高效、灵活和安全的开发环境,使我能够成功地开发了一个爬取B站视频并可视化的应用程序。这个应用程序不仅可以帮助我更好地了解B站视频的趋势和热门内容,还可以为其他用户提供有价值的数据分析和参考。