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

优采云 发布时间: 2022-02-23 13:20

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

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

  

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

  项目涉及的主要 Python 模块:

  ** ** 爬虫部分

  爬虫部分组织如下?

  观察URL1的源码找到队名和对应的URL2 观察URL2的源码找到玩家对应的URL3 观察URL3的源码**** 找到对应的基本信息和比赛数据播放器并过滤和存储它们

  其实爬虫是对html进行操作的,而html的结构很简单,只有一个,就是一个大框架协商一个小框架,小框架嵌套在小框架内,这样一层一层的层嵌套。

  目标网址如下:

  先引用模块

  1from bs4 import BeautifulSoupimport requestsimport xlsxwriterimport os

2

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

  此时,可以使用 requests 模块和 bs4 模块进行有目的的索引以获取团队名称列表。

  1def Teamlists(url):

2    TeamName=[] 

3    TeamURL=[] 

4    GET=requests.get(URL1)

5    soup=BeautifulSoup(GET.content,'lxml')

6    lables=soup.select('html body div div div ul li span a') for lable in lables:

7        ballname=lable.get_text()

8        TeamName.append(ballname)

9        print(ballname)

10    teamname=input("请输入想查询的球队名:")#此处可变为GUI界面中的按键值

11    c=TeamName.index(teamname)for item in lables:

12     HREF=item.get('href')

13     TeamURL.append(HREF)

14    URL2=TeamURL[c] return URL2

15

  这样就得到了对应球队的URL2,然后观察URL2网页的内容,可以看到球员的名字在标签a下,对应球员的URL3也被存储了,如图下图:

  此时,仍然使用requests模块和bs4模块的对应索引来获取播放器名称列表和对应的URL3。

  1#自定义函数获取队员列表和对应的URLdef playerlists(URL2):

2    PlayerName=[] 

3    PlayerURL=[] 

4    GET2=requests.get(URL1)

5    soup2=BeautifulSoup(GET2.content,'lxml')

6    lables2=soup2.select('html body div div table tbody tr td b a')for lable2 in lables2:

7        playername=lable2.get_text()

8        PlayerName.append(playername)

9        print(playername)

10    name=input("请输入球员名:") #此处可变为GUI界面中的按键值

11    d=PlayerName.index(name)for item2 in lables2:

12     HREF2=item2.get('href')

13     PlayerURL.append(HREF2)

14    URL3=PlayerURL[d]return URL3,name

15

  现在我们已经获得了对应队伍的URL3,然后观察URL3网页的内容。可以看到球员的基本信息在标签p下,球员常规赛生涯数据和季后赛生涯数据在标签td下,如下图:

  同理,通过requests模块和bs4模块之间的对应索引,得到球员的基本信息和生涯数据,对球员常规赛和季后赛的生涯数据进行过滤存储,得到数据列表.

  1def Competition(URL3):

2    data=[]

3    GET3=requests.get(URL3)

4    soup3=BeautifulSoup(GET3.content,'lxml')

5    lables3=soup3.select('html body div div div div div div div div p')

6    lables4=soup3.select('div div table tbody tr td')for lable3 in lables3:

7     introduction=lable3.get_text() 

8     print(introduction)  #球员基本信息for lable4 in lables4:

9        competition=lable4.get_text()

10        data.append(competition) for i in range(len(data)):if data[i]=='职业生涯常规赛平均数据':

11            a=data[i+31]

12            a=data.index(a)del(data[:a]) for x in range(len(data)):if data[x]=='职业生涯季后赛平均数据':

13            b=data[x]

14            b=data.index(b)del(data[b:])return data

15

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

  ** ** 可视化部分

  **想法:创建文件夹**创建表格和折线图

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

  1def file_add(path):  #此时的内函数path可与GUI界面的Statictext绑定

2    creatpath=path+'\\Basketball' try:if not os.path.isdir(creatpath):

3      os.makedirs(creatpath)       except:

4     print("文件夹存在")return creatpath

5

  使用xlsxwriter模块在creatpath路径下创建带有自定义函数的excel表格,同时放入数据和构造折线图。代码如下:

  1def player_chart(name,data,creatpath):#此为表格名称——球员名称+chart

2    EXCEL=xlsxwriter.Workbook(creatpath+'\\'+name+'chart.xlsx')

3    worksheet=EXCEL.add_worksheet(name) 

4    bold=EXCEL.add_format({'bold':1}) 

5    headings=data[:18]

6    worksheet.write_row('A1',headings,bold) #写入表头

7    num=(len(data))//18

8    a=0for i in range(num):

9        a=a+18

10        c=a+18

11        i=i+1

12        worksheet.write_row('A'+str(i+1),data[a:c]) #写入数据

13    chart_col = EXCEL.add_chart({'type': 'line'}) #创建一个折线图

14    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轴信息

15    chart_col.set_title({'name': name+'生涯常规赛平均得分'}) 

16    chart_col.set_x_axis({'name': '年份 (年)'}) 

17    chart_col.set_y_axis({'name': '平均得分(分)'})

18    chart_col.set_style(1) #设置图表风格

19    worksheet.insert_chart('A14', chart_col, {'x_offset':25, 'y_offset':3,}) #把图标插入工作台中并设置偏移

20    EXCEL.close()

21

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

  

  而此时打开自动生成的Excel,对应的折线图就会直接显示出来,不用再整理了!

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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线