excel抓取网页数据(如何用Python构建一个带有GUI的爬虫小程序-之前)

优采云 发布时间: 2021-12-09 10:07

  excel抓取网页数据(如何用Python构建一个带有GUI的爬虫小程序-之前)

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

  

  本文将分为以下两部分来讲解

  项目涉及的主要Python模块:

  履带部分

  整理爬虫部分的思路如下

  观察URL1的源码,找到球队名和对应的URL2 观察URL2的源码,找到球员对应的URL3

  其实爬虫是对html进行操作的,html的结构很简单。只有一个,就是大盒子和小盒子,小盒子嵌套在小盒子中,一层一层嵌套。

  目标网址如下:

  先参考模块

  from bs4 import BeautifulSoupimport requestsimport xlsxwriterimport os

  查看URL1的源码,可以看到span标签下有团队名称及其对应的URL2,然后找到它的父框架和祖父框架。下面的思路都是一样的,如下图所示:

  

  此时,可以使用 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模块进行对应的index来获取玩家名单和对应的URL3。

  #自定义函数获取队员列表和对应的URLdef 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模块仍然用于相应的索引,获取球员基本信息和职业数据,并过滤存储球员的常规赛和季后赛生涯数据,得到数据列表。

  以下数据是通过上述网络爬虫获取的,提供可视化数据,方便绑定后的GUI界面按键事件:

  可视化部分

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

  自定义函数创建表,使用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()

  数据表效果如图,以James为例如下

  

  而这时候打开自动生成的Excel,就会直接显示出相应的折线图,无需再整理!

  

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

  顺便说一句,很多人在学习Python的过程中都会遇到各种各样的麻烦,谁也不会轻易放弃。编辑是python开发工程师。这里我整理了一套最新的python系统学习教程,包括基础python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等,想要这些资料的可以关注小编,私信后台编辑:“01”接收。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线