可视化|「奔跑吧」全系列嘉宾名单进行可视化分析
作者:互联网
今天分析『奔跑吧』全系列的嘉宾名单,分析每位嘉宾参加次数(可能有的嘉宾参加过几季),以及统计嘉宾职业类型个数,最后进行可视化展示分析。
# 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季为例去分析网页结构(其他的链接网页结构一样)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/eeea792f636540e58bf532e380201d0c~tplv-k3u1fbpfcp-zoom-1.image)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6722b80c64e04f9a85f4418e2a733651~tplv-k3u1fbpfcp-zoom-1.image)
咱们主要是爬取嘉宾姓名和明星类型(演员、歌手等)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/325bad594a7b4e49bd4fe5af64cf5719~tplv-k3u1fbpfcp-zoom-1.image)
本来想通过xpath解析网页方式去定位数据,但是发现定位不到,所以就采取了另外一种方式:字符串截取(其实正则re也可以,有很多种方式,只要能够解析出来即可,大家可以自由发挥)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c8a97406f2eb4b7d981536997be4dd8c~tplv-k3u1fbpfcp-zoom-1.image)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d7e026eee8db4caa9884d30ad06a4a23~tplv-k3u1fbpfcp-zoom-1.image)
截取前后分别是:分期嘉宾、表演嘉宾
# 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))
```
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4ebd1ea01efd4fa4b47d2d4ce0521243~tplv-k3u1fbpfcp-zoom-1.image)
保存数据(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") # 保存
```
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a8e7a291312d4961aedadb06f1a6cc53~tplv-k3u1fbpfcp-zoom-1.image)
# 3、可视化分析
## 1.统计每一位嘉宾参加次数排名(取前15)
首先读取excel中数据,其中名字(第一列)存放在name变量中,明星类型(第二列)存放在types变量中。
```python
data = pd.read_excel("奔跑吧嘉宾名单-李运辰.xls")
name = data['名字'].tolist()
types = data['明星类型'].tolist()
```
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cf0ec0561bc24716afc4f80e3f7ca6db~tplv-k3u1fbpfcp-zoom-1.image)
然后对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)
```
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/810117e719904db3bbdee42fb77b3195~tplv-k3u1fbpfcp-zoom-1.image)
进行可视化展示
导入相关的库
```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")
)
```
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/aca21d5358d74d369b5e4edbbeb1e0a7~tplv-k3u1fbpfcp-zoom-1.image)
从图中可以看到,参加奔跑吧节目最多的嘉宾是:林更新(3次),其他的最多的次数是两次。
## 2.嘉宾职业类型统计
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/662c360345284c23b3a6e03c0a3cab1e~tplv-k3u1fbpfcp-zoom-1.image)
从嘉宾(明星)类型中可以大概知道有这么几类(演员、歌手、主持人、模特、主持人、运动员、舞者、制片人、赛车手、经纪人)
开始统计以上这几种职业类型的个数
```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)
```
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/462fd0536a3e46b5a956767aa145a8f7~tplv-k3u1fbpfcp-zoom-1.image)
开始绘图
```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")
```
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b601c994bad449dab1c914b10d01c109~tplv-k3u1fbpfcp-zoom-1.image)
从统计图来看,嘉宾中职业最多的是演员,其次是歌手。
# 4、小结
今天分析『奔跑吧』全系列的嘉宾名单,分析每位嘉宾参加次数(可能有的嘉宾参加过几季),以及统计嘉宾职业类型个数,最后进行可视化展示分析。
标签:name,嘉宾,奔跑,k3u1fbpfcp,可视化,https,com,全系列 来源: https://blog.51cto.com/u_11949039/2901868