今天分析『奔跑吧』全系列的嘉宾名单,分析每位嘉宾参加次数(可能有的嘉宾参加过几季),以及统计嘉宾职业类型个数,最后进行可视化展示分析。 # 1、网页分析 通过网上查询,知道『奔跑吧』到目前为止一共9季,先是奔跑吧兄弟1~4,到后面改名为奔跑吧1~4,以及奔跑吧黄河篇。 对应的网页链接如下: ```python url_list=[ 'https://baike.baidu.com/item/奔跑吧兄弟第一季#4_2', 'https://baike.baidu.com/item/奔跑吧兄弟第二季/16414779', 'https://baike.baidu.com/item/奔跑吧兄弟第三季', 'https://baike.baidu.com/item/奔跑吧兄弟第四季', 'https://baike.baidu.com/item/奔跑吧第一季/20433390?fromtitle=奔跑吧第1季&fromid=22645259&fr=aladdin#4_2', 'https://baike.baidu.com/item/奔跑吧第二季/22421345?fromtitle=奔跑吧第2季&fromid=22645247&fr=aladdin#4_2', 'https://baike.baidu.com/item/奔跑吧第三季/23284990?fromtitle=奔跑吧第3季&fromid=23285732&fr=aladdin', 'https://baike.baidu.com/item/奔跑吧第四季/24701671?fromtitle=奔跑吧第4季&fromid=50003758&fr=aladdin', 'https://baike.baidu.com/item/奔跑吧·黄河篇/53052048' ] ``` ## 1.分析网页结构 首先以奔跑吧第1季为例去分析网页结构(其他的链接网页结构一样)   咱们主要是爬取嘉宾姓名和明星类型(演员、歌手等)  本来想通过xpath解析网页方式去定位数据,但是发现定位不到,所以就采取了另外一种方式:字符串截取(其实正则re也可以,有很多种方式,只要能够解析出来即可,大家可以自由发挥)   截取前后分别是:分期嘉宾、表演嘉宾 # 2、获取数据 首先导入相应的库 ```python import requests from lxml import etree import json import time import openpyxl ``` 将9季的网页链接放到集合中url_list,同时定义name存放嘉宾名字,types是明星类型(歌手、演员等) ```python ### 姓名 name = [] ### 明星类型 types = [] url_list=[ 'https://baike.baidu.com/item/奔跑吧兄弟第一季#4_2', 'https://baike.baidu.com/item/奔跑吧兄弟第二季/16414779', 'https://baike.baidu.com/item/奔跑吧兄弟第三季', 'https://baike.baidu.com/item/奔跑吧兄弟第四季', 'https://baike.baidu.com/item/奔跑吧第一季/20433390?fromtitle=奔跑吧第1季&fromid=22645259&fr=aladdin#4_2', 'https://baike.baidu.com/item/奔跑吧第二季/22421345?fromtitle=奔跑吧第2季&fromid=22645247&fr=aladdin#4_2', 'https://baike.baidu.com/item/奔跑吧第三季/23284990?fromtitle=奔跑吧第3季&fromid=23285732&fr=aladdin', 'https://baike.baidu.com/item/奔跑吧第四季/24701671?fromtitle=奔跑吧第4季&fromid=50003758&fr=aladdin', 'https://baike.baidu.com/item/奔跑吧·黄河篇/53052048' ] ``` 开始请求数据 ```python ### 循环遍历 for u in url_list: url = u print(url) res = requests.get(url,headers=headers) res.encoding = 'utf-8' text = res.text sp1 = text.split("参与期数")[1].split("表演嘉宾")[0] selector = etree.HTML(sp1) tr_list = selector.xpath('.//tr') tr_list = tr_list[1:] ###名字 for i in tr_list: #print(i.xpath(".//div[@class='para']/b/a/text()")[0]) name.append(i.xpath(".//div[@class='para']/b/a/text()")[0]) ### 明星类型 for i in tr_list: te = i.xpath(".//div[@class='para']/text()")[0] te = te.split(",")[0].replace("(","") #print(te) types.append(te) print(name) print(types) print(len(name)) print(len(types)) ```  保存数据(excel) ```python outwb = openpyxl.Workbook() outws = outwb.create_sheet(index=0) outws.cell(row=1, column=1, value="名字") outws.cell(row=1, column=2, value="明星类型") for i in range(0,len(name)): outws.cell(row=i+2, column=1, value=str(name[i])) outws.cell(row=i+2, column=2, value=str(types[i])) outwb_p.save("奔跑吧嘉宾名单-李运辰.xls") # 保存 ```  # 3、可视化分析 ## 1.统计每一位嘉宾参加次数排名(取前15) 首先读取excel中数据,其中名字(第一列)存放在name变量中,明星类型(第二列)存放在types变量中。 ```python data = pd.read_excel("奔跑吧嘉宾名单-李运辰.xls") name = data['名字'].tolist() types = data['明星类型'].tolist() ```  然后对name,嘉宾名字进行个数(参加过多少次)统计排名(取前15) ```python # 排序方法 from collections import Counter # 排序 d = sorted(result.items(), key=lambda x: x[1], reverse=True) name_key = [d[i][0] for i in range(0,16)] value = [d[i][1] for i in range(0,16)] print(name_key) print(value) ```  进行可视化展示 导入相关的库 ```python ### 画图 from pyecharts import options as opts from pyecharts.globals import ThemeType from pyecharts.charts import Bar from pyecharts.charts import Pie ``` 绘图代码 ```python # 链式调用 c = ( Bar( init_opts=opts.InitOpts( # 初始配置项 theme=ThemeType.MACARONS, animation_opts=opts.AnimationOpts( animation_delay=1000, animation_easing="cubicOut" # 初始动画延迟和缓动效果 )) ) .add_xaxis(xaxis_data=name_key) # x轴 .add_yaxis(series_name="统计每一位嘉宾参加次数排名(取前15)", y_axis=values) # y轴 .set_global_opts( title_opts=opts.TitleOpts(title='', subtitle='', # 标题配置和调整位置 title_textstyle_opts=opts.TextStyleOpts( font_family='SimHei', font_size=25, font_weight='bold', color='red', ), pos_left="90%", pos_top="10", ), xaxis_opts=opts.AxisOpts(name='嘉宾', axislabel_opts=opts.LabelOpts(rotate=45)), # 设置x名称和Label rotate解决标签名字过长使用 yaxis_opts=opts.AxisOpts(name='次数'), ).render("统计每一位嘉宾参加次数排名(取前15).html") ) ```  从图中可以看到,参加奔跑吧节目最多的嘉宾是:林更新(3次),其他的最多的次数是两次。 ## 2.嘉宾职业类型统计  从嘉宾(明星)类型中可以大概知道有这么几类(演员、歌手、主持人、模特、主持人、运动员、舞者、制片人、赛车手、经纪人) 开始统计以上这几种职业类型的个数 ```python ### 嘉宾职业类型 name = ['演员','歌手','主持人','模特','主持人','运动员','舞者','制片人','赛车手','经纪人'] ### 初始化为0 value = [0,0,0,0,0,0,0,0,0,0] for i in types: for j in range(0,len(name)): if name[j] in i: value[j] = value[j] +1 print(name) print(value) ```  开始绘图 ```python pie = Pie("嘉宾职业类型统计",title_pos='center') pie.add( "", name, value, radius=[40, 75], label_text_color=None, is_label_show=True, is_more_utils=True, legend_orient="vertical", legend_pos="left", ) pie.render(path="嘉宾职业类型统计.html") ```  从统计图来看,嘉宾中职业最多的是演员,其次是歌手。 # 4、小结 今天分析『奔跑吧』全系列的嘉宾名单,分析每位嘉宾参加次数(可能有的嘉宾参加过几季),以及统计嘉宾职业类型个数,最后进行可视化展示分析。
微信关注我们
原文链接:https://blog.51cto.com/u_11949039/2901868
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
相关文章
发表评论
资源下载
更多资源优质分享Android(本站安卓app)
近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。
Oracle Database,又名Oracle RDBMS
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。
Apache Tomcat7、8、9(Java Web服务器)
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Eclipse(集成开发环境)
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。