赞
踩
(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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。