其他
实战|手把手教你用Python爬取存储数据,还能自动在Excel中可视化
The following article is from 早起Python Author 投稿君
在虎扑NBA官网球员页面中进行爬虫,获取球员数据。 清洗整理爬取的球员数据,对其进行可视化。
requests pandas bs4
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
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
#自定义函数获取队员列表和对应的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
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
获取NBA中的所有球队的标准名称; 通过指定的一只球队获取球队中所有球员的标准名称; 通过指定的球员获取到对应的基本信息以及常规赛与季后赛数据;
def file_add(path): #此时的内函数path可与GUI界面的Statictext绑定
creatpath=path+'\\Basketball'
try:
if not os.path.isdir(creatpath):
os.makedirs(creatpath)
except:
print("文件夹存在")
return creatpath
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()