(1)网页分析
打开虎扑体育网页,对网页进行分析,使用xpath定位相关元素,提取数据
(2)数据爬取
导入相关的库:“import requests”,“import csv”,利用requests的get()方法爬取数据,并用csv格式保存数据。
编辑爬虫文件:使用xpath的方法对网页元素进行定位。
运行代码并保存数据。
参考代码如下:
import csv
f = open('hpty.csv', mode='a', encoding='utf8', newline='')
csv_write = csv.DictWriter(f, fieldnames=['排名', '球队', '球员', '场均得分', '命中率', '三分命中率', '罚球命中率'])
csv_write.writeheader()
url = 'https://nba.hupu.com/stats/players'
head = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'
}
nb = requests.get(url, headers=head).text
from lxml import etree
sb = etree.HTML(nb)
whh = sb.xpath('//tbody/tr[not(@class)]')
for i in whh:
pm = str(i.xpath('./td[1]/text()')).replace("['", "").replace("']", "") # 排名
team = str(i.xpath('./td[3]/a/text()')).replace("['", "").replace("']", "") # 球队
name = str(i.xpath('./td[2]/a/text()')).replace("['", "").replace("']", "") # 球员
score = str(i.xpath('./td[4]/text()')).replace("['", "").replace("']", "") # 得分
mzl = str(i.xpath('./td[6]/text()')).replace("['", "").replace("']", "") # 命中率
sfmzl = str(i.xpath('./td[8]/text()')).replace("['", "").replace("']", "") # 三分命中率
fqmzl = str(i.xpath('./td[10]/text()')).replace("['", "").replace("']", "") # 罚球命中率
print(pm, name, team, score, mzl, sfmzl, fqmzl)
data_dict = {'排名': pm, '球队': team, '球员': name, '场均得分': score, '命中率': mzl, '三分命中率': sfmzl, '罚球命中率': fqmzl}
csv_write.writerow(data_dict)
f.close()
得到的数据如下:
(3)Excel数据可视化图表:
打开“hpty”数据表,选择“F1:G:11单元格区域”,然后单击“插入”选项卡中的“查看所以图表”按钮,弹出“插入图表”对话框,在“所有图表”选项卡中的选择“柱形图”中的任意一种柱形图类型,如右图所示。
(4)Tableau可视化图表
打开Tableau工具,在开始界面选择“连接到文件”,在对话框中将“hpty.csv”导入Tableau;单击“Tableau-工作簿1”界面下方的“工作表1选项”,进入工作表1的界面中,将度量区域中的“球员”字段拖进到列功能区,把度量值区域的“场均得分”拉进到行的功能区,就可以得到垂直的柱形图,如右图所示。
(5) pyecharts可视化图表:
代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pyecharts.charts import Bar
from pyecharts import options as opts
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_csv(r'D:\努力学python\文章\hpty.csv')
df2 = df['场均得分'][:10]
df1 = df['球员'][:10]
a = (
Bar()
.add_xaxis(list(df1.values))
.add_yaxis('球员场均得分', df2.values.tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title='球员场均得分情况'),
datazoom_opts=opts.DataZoomOpts()
)
)
a.render('pyecharts.html')
(6)Pandas数据可视化图表
Pandas使用一维的数据结构Series和二维的数据结构DataFrame来表示数据,Pandas可以存储混合的数据结构。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_csv(r'D:\努力学python\文章\hpty.csv')
data = pd.DataFrame(list(df['场均得分'][:10]),
index=df['球员'][:10])
data.plot.bar(color='b')
plt.show()
版权归原作者 鄙人阿彬 所有, 如有侵权,请联系我们删除。