Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >实战|手把手教你用Python爬取存储数据,还能自动在Excel中可视化!

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

作者头像
星星在线
发布于 2020-11-19 07:19:39
发布于 2020-11-19 07:19:39
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

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

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

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

项目主要涉及的Python模块:

  • requests
  • pandas
  • bs4

爬虫部分

爬虫部分整理思路如下?

观察URL1的源代码

\Rightarrow

找到球队名称与对应URL2

\Rightarrow

观察URL2的源代码

\Rightarrow

找到球员对应的URL3

\Rightarrow

观察URL3源代码

\Rightarrow

找到对应球员基本信息与比赛数据并进行筛选存储

其实爬虫就是在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

先引用模块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from bs4 import BeautifulSoup
import requests
import xlsxwriter
import os

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#自定义函数获取队员列表和对应的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列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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中的所有球队的标准名称;
  • 通过指定的一只球队获取球队中所有球员的标准名称;
  • 通过指定的球员获取到对应的基本信息以及常规赛与季后赛数据;

可视化部分

思路:创建文件夹

\Longrightarrow

创建表格和折线图

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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表格同时放入数据与构造折线图,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,对应的折线图就直接展现出来,无需再次整理!

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

-END-

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python爬虫实战之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​AI+代理IP手把手教你爬取某度
最近Deepseek火遍大江南北,很多朋友都会用它制作一些小型程序商用,其中不乏有网络爬虫。以前对于中小企业来说,“写个爬虫”似乎是一件遥不可及的事情。
袁袁袁袁满
2025/04/18
780
NBA投篮数据可视化,4行代码就能实现!
https://github.com/theccalderon/shot_chart
小F
2020/10/20
7601
NBA投篮数据可视化,4行代码就能实现!
火箭五年四遇勇士,终究还是败了。
「乔丹」、「奥尼尔」、「加内特」、「麦迪」、「科比」、「詹姆斯」、「库里」七位登顶第一的球员。
小F
2020/10/09
4670
火箭五年四遇勇士,终究还是败了。
Python爬虫以及数据可视化分析「建议收藏」
简书地址:https://www.jianshu.com/u/40ac87350697
全栈程序员站长
2022/07/04
7290
Python爬虫以及数据可视化分析「建议收藏」
手把手教你用Bokeh进行可视化数据分析(附源码)
上一篇利用交互式可视化分析了一下金州勇士队4年3冠的原因,其中数据处理部分使用了numpy和pandas,可视化部分使用的是Bokeh和Plotly,效果非常赞,链接如下:
Python数据科学
2018/12/24
2.8K0
手把手教你用Bokeh进行可视化数据分析(附源码)
金州勇士4年3冠的成功秘诀!数据可视化分析告诉你答案
2015年6月,记得那时候我正在忙着研究生毕业,也是在那个时候,NBA总决赛的开始了。当时,金州勇士队作为一匹黑马收到很多人看好,果然不负所望,勇士队一路过关斩将一举拿下了总冠军。也是在那个时候,由于库里的出色表现,给大家留下了深刻的印象,成为勇士当家球员。
Python数据科学
2018/12/24
7310
金州勇士4年3冠的成功秘诀!数据可视化分析告诉你答案
爬虫实战-手把手教你爬豆瓣电影
如果上面三小节还有问题,可以点回去再复习一下。作为基础内容并不是要求大家一定都掌握,特别是第三小节,网页解析用法特别多,一般人很难都记住。 我在写这篇的时候也会时不时的翻回去看一看之前的文章,可能有的方法并不是最简单的方法,但是只要达成目的就ok,这里你们自由发挥。
小一不二三
2019/12/31
9850
爬虫实战-手把手教你爬豆瓣电影
『爬虫四步走』手把手教你使用Python抓取并存储网页数据!
爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Python爬虫的基本流程。如果你还在入门爬虫阶段或者不清楚爬虫的具体工作流程,那么应该仔细阅读本文!
刘早起
2020/10/23
5.7K1
『爬虫四步走』手把手教你使用Python抓取并存储网页数据!
不能再简单了|手把手教你爬取美国疫情实时数据
大家好,最近一直有读者在后台留言说早起能不能写一下怎么获取国外的疫情数据、美国疫情数据怎么爬之类的。为了满足各位,今天就说一下如何爬取美国疫情数据。废话不多说,直接开始,只需一台电脑,按照下面的顺序一步一步执行,爬不下来数据你打我,文末不提供源码,源码一字不少全在文中。
刘早起
2020/04/22
1.5K0
用python爬取腾讯招聘网岗位信息保存到表格,并做成简单可视化。(附源码)「建议收藏」
开发环境 Windows 10 python3.6 开发工具 pycharm 库 numpy、matplotlib、time、xlutils.copy、os、xlwt, xlrd, random 开发思路
全栈程序员站长
2022/06/27
1.1K0
用python爬取腾讯招聘网岗位信息保存到表格,并做成简单可视化。(附源码)「建议收藏」
用Python制作酷炫的可视化大屏,特简单!
在数据时代,我们每个人既是数据的生产者,也是数据的使用者,然而初次获取和存储的原始数据杂乱无章、信息冗余、价值较低。
小F
2021/12/27
2K0
用Python制作酷炫的可视化大屏,特简单!
手把手教你用Python网络爬虫+自动化来创建一位属于你自己的虚拟女票(附源码)
啊,冰冰真好看。这里给大家介绍下冰冰女神:王冰冰,出生于吉林省长春市,中国内地女记者。
Python进阶者
2021/08/20
4540
Python实现办公自动化的数据可视化与报表生成
引言:在现代办公环境中,数据处理和报表生成是一项重要的任务。然而,手动处理大量数据和生成报表是一项繁琐且容易出错的工作。幸运的是,Python提供了强大的工具和库,可以帮助我们实现办公自动化,从而提高工作效率和准确性。本文将高效介绍如何使用Python进行数据可视化和报表生成,让您的办公工作更加顺利。
小白学大数据
2023/07/19
4710
Python爬取哈尔滨旅游爆火视频数据并进行可视化分析
哈尔滨作为中国北方的重要城市,独特的冰雪风情和丰富的文化底蕴而受到游客的青睐。随着抖音等短视频平台的兴起,越来越多关于哈尔滨旅游的视频在网络上出现文章旨在利用Python编程语言,从音视频网站上抓取哈尔滨旅游抖音相关视频数据,并通过数据可视化技术对这些数据进行分析,以期为旅游行业的发展和营销提供依据的大力支持。
小白学大数据
2024/01/10
4030
手把手教你用python爬取猫眼TOP100电影信息
在生活中,我们如果想要对网站上的数据进行使用的话,一般我们都会使用复制粘贴的方法进行复制过来,但如果数据量很多的话,你就会像个机械人一样做着重复的事,而使用Python爬虫可以轻松的从网站上抓取我们想要的数据,不必要做重复的事情。本文将基于爬取猫眼TOP100电影信息并存储为例,介绍Python爬虫的基本流程。
Python与Excel之交
2021/08/05
1.8K1
3000字 “婴儿级” 爬虫图文教学 | 手把手教你用Python爬取 “实习网”!
这篇文章,是专门为那些 "刚学习" Python爬虫的朋友,而专门准备的文章。希望你看过这篇文章后,能够清晰的知道整个"爬虫流程"。从而能够 "独立自主" 的去完成,某个简单网站的数据爬取。
快学Python
2021/08/09
3480
手把手教你用Python打造一款批量下载视频并能可视化显示下载进度的下载器
平时宅在家的我们最爱做的事莫过于追剧了,但是有时候了,网络原因,可能会让你无网可上。这个时候那些好看的电视剧和电影自然是无法观看了,本期我们要讲的就是怎样下载这些视频。
Python进阶者
2020/06/19
1.9K0
手把手教你用Python打造一款批量下载视频并能可视化显示下载进度的下载器
手把手教你用Selenium爬取拉勾网数据!
大家好,在之前我们讲解过很多基于requests+bs4的爬虫,现在换个口味,本文将基于Selenium讲解如何爬取并使用openpyxl存储拉勾网招聘数据。
刘早起
2020/11/05
1.5K0
一键实现数据采集和存储:Python爬虫、Pandas和Excel的应用技巧
作为一名互联网技术爱好者,我对数据的探索充满热情。在本文中,我将以豆瓣读书为案例,详细介绍如何利用Python爬虫、Pandas和Excel这三大工具,一键化地实现数据采集和存储。豆瓣读书作为一个备受推崇的图书评价平台,拥有大量的书籍信息和用户评价数据,适合我们展示数据处理过程。
小白学大数据
2024/03/25
3210
手把手教你用Python爬取某网小说数据,并进行可视化分析
网络文学是以互联网为展示平台和传播媒介,借助相关互联网手段来表现文学作品及含有一部分文字作品的网络技术产品,在当前成为一种新兴的文学现象,并快速兴起,各种网络小说也是层出不穷,今天我们使用selenium爬取红袖天香网站小说数据,并做简单数据可视化分析。
数据STUDIO
2021/09/26
7.4K1
手把手教你用Python爬取某网小说数据,并进行可视化分析
推荐阅读
相关推荐
​AI+代理IP手把手教你爬取某度
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验