实战|手把手教你用Python爬取存储数据,还能自动在Excel中可视化!「建议收藏」

实战|手把手教你用Python爬取存储数据,还能自动在Excel中可视化!「建议收藏」大家好 在之前我们讲过如何用 Python 构建一个带有 GUI 的爬虫小程序 很多本文将迎合热点 延续上次的 NBA 爬虫 GUI 探讨如何爬取虎扑 NBA 官网数据 并且将数据写入 Excel 中同时自动生成折线图 主要有以下几个步骤 本文将分为以下两个部分进行讲解 在虎扑 NBA 官网球员页面中进行爬虫 获取球员数据 清洗整理爬取的球员数据 对其进行可视化 项目主要涉及的 Python 模块 requests

大家好,在之前我们讲过如何用Python构建一个带有GUI的爬虫小程序,很多本文将迎合热点,延续上次的NBA爬虫GUI,探讨如何爬取虎扑NBA官网数据。 并且将数据写入Excel中同时自动生成折线图,主要有以下几个步骤

本文将分为以下两个部分进行讲解

在虎扑NBA官网球员页面中进行爬虫,获取球员数据。

清洗整理爬取的球员数据,对其进行可视化。

项目主要涉及的Python模块:

requests

pandas

bs4

爬虫部分

爬虫部分整理思路如下👇

观察URL1的源代码找到球队名称与对应URL2观察URL2的源代码找到球员对应的URL3观察URL3源代码找到对应球员基本信息与比赛数据并进行筛选存储

其实爬虫就是在html上操作,而html的结构很简单就只有一个,就是一个大框讨一个小框,小框在套小框,这样的一层层嵌套。

目标URL如下:

URL1:http://nba.hupu.com/players/

URL2(此处以湖人球队为例):https://nba.hupu.com/players/lakers

URL3(此处以詹姆斯为例):https://nba.hupu.com/players/lebronjames-650.html

先引用模块

from bs4 import BeautifulSoup
import requests
import xlsxwriter
import os

查看URL1源代码代码,可以看到球队名词及其对应的URL2在span标签中下,进而找到它的父框与祖父框,下面的思路都是如此,图如下:

此时,可以通过requests模块与bs4模块进行有目的性的索引,得到球队的名称列表。

def Teamlists(url):
TeamName=[]
TeamURL=[]
GET=requests.get(URL1)
soup=BeautifulSoup(GET.content,'lxml')
lables=soup.select('html body div div div ul li span a')
for lable in lables:
ballname=lable.get_text()
TeamName.append(ballname)
print(ballname)
teamname=input("请输入想查询的球队名:")#此处可变为GUI界面中的按键值
c=TeamName.index(teamname)
for item in lables:
HREF=item.get('href')
TeamURL.append(HREF)
URL2=TeamURL[c]
return URL2

就此得到了对应球队的URL2,接着观察URL2网页的内容,可以看到球员名称在标签a中下,同时也存放着对应球员的URL3,如下图:

此时,故依然通过requests模块与bs4模块进行相对应的索引,得到球员名称列表以及对应的URL3。

#自定义函数获取队员列表和对应的URL
def playerlists(URL2):
PlayerName=[]
PlayerURL=[]
GET2=requests.get(URL1)
soup2=BeautifulSoup(GET2.content,'lxml')
lables2=soup2.select('html body div div table tbody tr td b a')
for lable2 in lables2:
playername=lable2.get_text()
PlayerName.append(playername)
print(playername)
name=input("请输入球员名:") #此处可变为GUI界面中的按键值
d=PlayerName.index(name)
for item2 in lables2:
HREF2=item2.get('href')
PlayerURL.append(HREF2)
URL3=PlayerURL[d]
return URL3,name

现在就此得到了对应球队的URL3,接着观察URL3网页的内容,可以看到球员基本信息在标签p下,球员常规赛生涯数据与季后赛生涯数据在标签td下,如下图:

同样,依然通过requests模块与bs4模块进行相对应的索引,得到球员基本信息与生涯数据,而对于球员的常规赛与季候赛的生涯数据将进行筛选与储存,得到data列表。

def Competition(URL3):
data=[]
GET3=requests.get(URL3)
soup3=BeautifulSoup(GET3.content,'lxml')
lables3=soup3.select('html body div div div div div div div div p')
lables4=soup3.select('div div table tbody tr td')
for lable3 in lables3:
introduction=lable3.get_text()
print(introduction) #球员基本信息
for lable4 in lables4:
competition=lable4.get_text()
data.append(competition)
for i in range(len(data)):
if data[i]=='职业生涯常规赛平均数据':
a=data[i+31]
a=data.index(a)
del(data[:a])
for x in range(len(data)):
if data[x]=='职业生涯季后赛平均数据':
b=data[x]
b=data.index(b)
del(data[b:])
return data

通过上述网络爬虫得到了以下的数据,提供可视化数据的同时便于绑定之后的GUI界面按键事件:

获取NBA中的所有球队的标准名称;

通过指定的一只球队获取球队中所有球员的标准名称;

通过指定的球员获取到对应的基本信息以及常规赛与季后赛数据;

可视化部分

思路:创建文件夹 创建表格和折线图

自定义函数创建表格,运用os模块进行编写,返回已创文件夹的路径,代码如下:

def file_add(path):  #此时的内函数path可与GUI界面的Statictext绑定
creatpath=path+'\\Basketball'
try:
if not os.path.isdir(creatpath):
os.makedirs(creatpath)
except:
print("文件夹存在")
return creatpath

运用xlsxwriter模块在creatpath路径下自定义函数创建excel表格同时放入数据与构造折线图,代码如下:

def player_chart(name,data,creatpath):
#此为表格名称——球员名称+chart
EXCEL=xlsxwriter.Workbook(creatpath+'\\'+name+'chart.xlsx')
worksheet=EXCEL.add_worksheet(name)
bold=EXCEL.add_format({'bold':1})
headings=data[:18]
worksheet.write_row('A1',headings,bold) #写入表头
num=(len(data))//18
a=0
for i in range(num):
a=a+18
c=a+18
i=i+1
worksheet.write_row('A'+str(i+1),data[a:c]) #写入数据
chart_col = EXCEL.add_chart({'type': 'line'}) #创建一个折线图
chart_col.add_series({
'name': '='+name+'!$R$1', #设置折线描述名称
'categories':'='+name+'!$A$2:$A$'+str(num), #设置图表类别标签范围
'values': '='+name+'!$R$2:$R$'+str(num-1), #设置图表数据范围
'line': {'color': 'red'}, }) #设置图表线条属性
#设置图标的标题和想x,y轴信息
chart_col.set_title({'name': name+'生涯常规赛平均得分'})
chart_col.set_x_axis({'name': '年份 (年)'})
chart_col.set_y_axis({'name': '平均得分(分)'})
chart_col.set_style(1) #设置图表风格
worksheet.insert_chart('A14', chart_col, {'x_offset':25, 'y_offset':3,}) #把图标插入工作台中并设置偏移
EXCEL.close()

数据表格效果展现,以詹姆斯为例如下

并且此时打开自动生成的Excel,对应的折线图就直接展现出来,无需再次整理!

现在结合任务一的网络爬虫与任务二的数据可视化,可以得到实时的球员常规赛数据与季后赛数据汇总,同时还有实时球员生涯折线图。
以上内容无用,为本篇博客被搜索引擎抓取使用

编程小号
上一篇 2025-08-31 14:06
下一篇 2025-09-15 23:33

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/141602.html