实战|手把手教你用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C#之AutoEventWireup

    C#之AutoEventWireup原文链接http://blog.sina.com.cn/s/blog_5d2ef8320100fcar.html如果Page指令的AutoEventWireup属性被设置为true(或者如果缺少此属性,因为它默认为true),该页框架将自动调用页事件,即Page_Init和Page_Load方法。在这种情况下,不需要任何显式的Handles子句或委托…

    2022年5月28日
    32
  • 开启1521端口监听_Oracle开放1521端口 telnet不通解决办法

    开启1521端口监听_Oracle开放1521端口 telnet不通解决办法在windosw虚拟机server2012上安装Oracle数据库后,远程连接失败,报java.sql.SQLException:TheNetworkAdaptercouldnotestablishtheconnection错误,然后尝试解决。1.先在防火墙上配置入站规则,开放1521端口。2.然后telnetserver_ip1521还是报连接失败,因为虚拟机的ip是配…

    2022年6月10日
    188
  • mapminmax 用法

    mapminmax 用法mapminmax是MATLAB实现归一化的工具包,默认:(1)将矩阵的每行分别进行归一化;(2)每行的最大值最小值作为每行归一化的xmin和xmax;(3)将数据归一化到[-1,1].若要将数据归一化到0到1之间,即y∈[0,1],使用b=mapminmax(a,0,1);若给与确定的最大值和最小值作为每行的xmin和xmax,使用:b= mapminmax(a,0,1);PS.xmin…

    2022年6月30日
    21
  • Java 使用 Tess4J 实现图像识别

    Java 使用 Tess4J 实现图像识别最近需要用Java做一个图像识别的东西,查了一些资料,在此写一个基于Tess4J的教程,方便其他人参考和使用。其实做图像识别,也可以使用TESSERACT-OCR来实现,但是该方式需要下载软件,在电脑上安装环境,移植性不高,使用Tess4J只需要下载相关Jar包,导入项目,再把项目封装好就可以处处运行了。首先,下载Tess4J的相关资源(一个压缩包),官网:http://tess4j.source…

    2022年6月13日
    52
  • http和https的优缺点,区别与工作原理

    http和https的优缺点,区别与工作原理

    2021年11月6日
    43
  • Python学习(十一)Python标识符命名规范

    Python学习(十一)Python标识符命名规范简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。Python中标识符的命名不是随意的,而是要遵守一定的命令规则,比如说:1.标识符是由字符(A~Z和a~z)、下划线和数字组成,但第一个字符不能是数字。2.标识符不能和Python中的保留字相同。有关保留字,后续章节会详细介绍。3.Python中的标…

    2022年9月9日
    0

发表回复

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

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