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

实战|手把手教你用Python爬取存储数据,还能自动在Excel中可视化!「建议收藏」大家好,在之前我们讲过如何用Python构建一个带有GUI的爬虫小程序,很多本文将迎合热点,延续上次的NBA爬虫GUI,探讨如何爬取虎扑NBA官网数据。 并且将数据写入Excel中同时自动生

大家好,又见面了,我是你们的朋友全栈君。

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

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

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

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

项目主要涉及的Python模块:

  • requests
  • pandas
  • bs4

 

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1156465813

 

  爬虫部分

爬虫部分整理思路如下?

观察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标签中<span class><a href = “…”>下,进而找到它的父框与祖父框,下面的思路都是如此,图如下:

 

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

此时,可以通过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,如下图:

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

此时,故依然通过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下,如下图:

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

同样,依然通过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()

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

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

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

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

现在结合任务一的网络爬虫与任务二的数据可视化,可以得到实时的球员常规赛数据与季后赛数据汇总,同时还有实时球员生涯折线图。

 

注意:如果你是打算找python高薪工作的话。我建议你多写点真实的企业项目积累经验。不然工作都找不到,当然很多人没进过企业,怎么会存在项目经验呢? 所以你得多找找企业项目实战多练习下撒。如果你很懒不想找,也可以进我的Python交流圈:1156465813。群文件里面有我之前在做开发写过的一些真实企业项目案例。你可以拿去学习,不懂都可以在裙里找我,有空会耐心给你解答下。

 

以下内容无用,为本篇博客被搜索引擎抓取使用
(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)
python 是干什么的 零基础学 python 要多久 python 为什么叫爬虫
python 爬虫菜鸟教程 python 爬虫万能代码 python 爬虫怎么挣钱
python 基础教程 网络爬虫 python python 爬虫经典例子
python 爬虫
(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)
以上内容无用,为本篇博客被搜索引擎抓取使用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156014.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ThreadPool.QueueUserWorkItem启动慢

    ThreadPool.QueueUserWorkItem启动慢一、问题描述ThreadPool.QueueUserWorkItem启动慢,在项目过程中发现当线程数量达到一定量的时候发线线程启动速度慢,影响了正常的实时性业务。二、解决方法加入ThreadPool.SetMinThreads(1000,1000)后,整个进程启动变块。如图1和图2,变快了。…

    2025年12月9日
    7
  • Pycharm自动导入模块小技巧「建议收藏」

    Pycharm自动导入模块小技巧「建议收藏」周末愉快!不知道大家周末写不写代码,哈哈,反正我已经加完班回来了,今天分享一个能提高编码效率的小技巧,可能你早就在用了,也可能像我一样刚学会,还是趁热跟大家分享一下。如果能把工具熟练运用,往往能达到事半功倍的效果,Pycharm是很多Python开发者的首选IDE,提供各种快捷键、重构功能、调试技巧等,Python是动态语言,对于自动导入模块没有静态语言那么方便,但有了Pycharm,还是…

    2022年8月27日
    5
  • 【工具使用】应用层DNS协议工具—iodine

    【工具使用】应用层DNS协议工具—iodine0x01iodine 工具介绍 iodine 工具是基于 C 语言开发的 分为服务端程序 iodined 和客户端 iodine iodine 支持 EDNS base32 base64 base128 等多种编码规范 iodine 支持转发模式和中继模式 iodine 原理 通过 TAP 虚拟网卡 在服务端建立一个局域网 在客户端 通过 TAP 建立一个虚拟网卡 两者通过 DNS 隧道连接 处于同一局域网 可以通过 ping 命令通信 在客户端和服务端之间建立连接后 客户机上会多出一块 dns0 的虚拟网卡 DNS 隧道

    2025年6月21日
    4
  • Java基础学习教程,eclipse简单使用教程(Java集成开发工具)

    Java基础学习教程,eclipse简单使用教程(Java集成开发工具)使用集成开发工具eclipse1、java的集成开发工具很多,包括:eclipse、IntellijIDEA、netbeans….. eclipse: IBM开发的。eclipse翻译为:日食。寓意吞并SUN公司(SUN是太阳。)最终没有成功,SUN公司在2009年的时候被oracle甲骨文公司收购。eclipse在以前的开发中使用非常多,但是由于IDEA工具的出现,让eclipse的用户大大减少,目前eclipse占市场份额30%。IDEA占市场份额60%,剩下10%是其他的开

    2022年6月28日
    31
  • 【转载】C# sleep 和wait的区别

    【转载】C# sleep 和wait的区别

    2021年11月20日
    49
  • loadrunner12安装教程_word入门基础教程视频

    loadrunner12安装教程_word入门基础教程视频Loadrunner安装_简单使用基础教程,包括VirtualUserGenerator、Controller、Analysis的简单使用以及对Loadrunner的介绍。

    2022年10月14日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号