网络爬虫+数据可视化

(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()

 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>