本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

以下文章最早早起Python ,作者投稿君

前言

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

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

  • 在虎扑NBA官网球员页面中进行爬虫,获取球员数据
  • 清洗整理爬取的球员数据,进行进行可视化

项目主要涉及的Python模块:

  • requests
  • pandas
  • bs4

爬虫部分

爬虫部分整理思路如下

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

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

目标URL如下:

网址1: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标签中<span class><a href = “...">下,看上去找到它的父框与祖父框,下面的思路都是如此,图如下:

此时,可以通过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中<a target = "_blank" href = ....>下,同时也放置着对应球员的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模块进行相对应的索引,得到球员基本信息与职业数据,而对于球员的常规赛与季候赛的职业数据将进行筛选与储存,得到数据列表。

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):#此为表格名称——球员名称+chartEXCEL=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))//18a=0for i in range(num):a=a+18c=a+18i=i+1worksheet.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,对应的折线图就直接展现出来无需再次整理!

现在结合任务一的网络爬虫与任务二的数据可视化,可以得到实时的球员常规赛数据与季后赛数据汇总,同时还有实时球员生涯折线图。便可以与上次的GUI界面任务设计中的”可视化”按钮事件绑定,研究者的读者可以自己进一步研究!

爬取NBA球员生涯数据,并在Excel中可视化显示相关推荐

  1. java爬虫抓取nba_爬取NBA球员生涯数据,并在Excel中可视化显示

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章最早早起Python ,作者投稿君 前言 大家好,在之前我们讲过如何使用Python内置一 ...

  2. python爬取17000个球员_Python爬取NBA球员生涯数据及简单可视化

    由于全球疫情的原因 NBA宣布无限期推迟比赛 也被迫随之进入了长草期 紧接着 狂摸话筒戈贝尔 连坐队友米切尔 网络小帅杜兰特 绿军硬汉斯马特 等十名球员相继官宣感染 洛杉矶湖人两人感染 但未公布名单 ...

  3. 爬table数据_爬取NBA球员薪资数据【Python数据分析百例连载】

    通过Pandas模块也可以实现简单的爬虫.主要使用Pandas的read_html方法,该方法用于导入带有table标签的网页表格数据,语法如下: pandas.read_html(io,match= ...

  4. NBA表格_爬取NBA球员薪资数据【Python数据分析百例连载】

    通过Pandas模块也可以实现简单的爬虫.主要使用Pandas的read_html方法,该方法用于导入带有table标签的网页表格数据,语法如下: pandas 主要参数说明: io:字符串,文件路径 ...

  5. Scrapy爬取豆瓣图书Top250数据,在PowerBI中可视化分析

    文章目录 项目说明 Scrapy框架 网页分析 爬虫代码 items spiders pipelines main 爬取结果 PowerBI分析 分析结果 项目说明 近期在学习Python爬虫,看了很 ...

  6. 爬取NBA球员数据画出球员的雷达图

    目录 爬取NBA球员数据并进行清洗 画出两个球员的雷达图 创建时间轴组件自动以时间轴播放 代码整理: 总结 爬取NBA球员数据并进行清洗 这里我是从https://nba.hupu.com/playe ...

  7. NBA球员生涯数据统计系统(中南大学C语言课设)

    自动化与电气类专业大一第一学期C语言的课程设计,留给后来的新生参考. 前排提醒:由于链表和文件不属于课程学习内容,且本人自学能力菜得真实,因此本人写的课设没有使用到链表(在学了在学了).但据本人同学所 ...

  8. python实战|python爬取58同城租房数据并以Excel文件格式保存到本地

    python实战|python爬取58同城租房数据并以Excel文件格式保存到本地 一.分析目标网站url 目标网站:https://cq.58.com/minsuduanzu/ 让我们看看网站长啥样 ...

  9. selenium 爬取cookie并且把数据下载到Excel

    selenium 爬取cookie并且把数据下载到Excel import requests import re import csv import ftplib import os import s ...

最新文章

  1. Mybatis面试常见问题
  2. 如何避免form提交进行页面跳转
  3. 使用关键字SCAN ABAP-SOURCE对ABAP源代码进行语法扫描
  4. java周志第二周_第二周JAVA学习日志
  5. 不会SQL?没关系,以后动动嘴就能查询数据库了 | 附论文
  6. 算法面试题:找出由两个有序列表合并而成的新列表中的第n个元素
  7. linux 路由协议,路由协议之RIP协议
  8. hdu 2035 人见人爱A^B (快速幂)
  9. 清华AI画虾师,想当现代齐白石
  10. SP104 Highways (矩阵树,高斯消元)
  11. maven-dependencyManagement和dependencies区别
  12. PTB-XL心电信号处理
  13. linux cpufreq 设置
  14. 斐波那契数列之不死神兔
  15. 微信小程序开发(4)--发布评论
  16. Centos修改DNS
  17. 增加 swap 空间
  18. 娃娃乐学拼音软件许可及服务协议
  19. [DirectShow] DirectShow的窗口
  20. python绘制彩色花_AI绘制非常漂亮的彩色花朵

热门文章

  1. P5149 会议座位(逆序对 离散化 hash 归并排序)
  2. 安卓系统监控任务管理器App推荐
  3. 利用Excel可视化分析,柱形图、条形图、饼图、复合饼图,圆环图、组合图、漏斗图、地图的操作方法(适合小白)
  4. APP用户生命周期价值分析与测量
  5. 我的世界java版mac切视角_我的世界伤害视角倾斜
  6. Android应用中保存网络图片功能实现详解
  7. 属性动画Android动画,Android动画(三)属性动画Animator与Interpolator
  8. MirSNP:miRNA相关SNP位点数据库
  9. Mint-UI时间组件起始时间问题
  10. Wi-Fi:802.11 物理层和发射机测量概述