如何用python爬取nba数据中心的数据

 我来答
从空去听8
2017-11-18 · TA获得超过7439个赞
知道大有可为答主
回答量:6907
采纳率:93%
帮助的人:5579万
展开全部

爬取的网站为:stat-nba.com,本文爬取的是NBA2016-2017赛季常规赛至2017年1月7日的数据

改变url_header和url_tail即可爬取特定的其他数据。

源代码如下:

[python] view plain copy

  • #coding=utf-8  

  • import sys  

  • reload(sys)  

  • sys.setdefaultencoding('utf-8')  

  • import requests  

  • import time  

  • import urllib  

  • from bs4 import BeautifulSoup  

  • import re  

  • from pyExcelerator import *  

  • def getURLLists(url_header,url_tail,pages):  

  • """ 

  • 获取所有页面的URL列表 

  • """  

  • url_lists = []  

  • url_0 = url_header+'0'+url_tail  

  • print url_0  

  • url_lists.append(url_0)  

  • for i in range(1,pages+1):  

  • url_temp = url_header+str(i)+url_tail  

  • url_lists.append(url_temp)  

  • return url_lists  

  • def getNBAAllData(url_lists):  

  • """ 

  • 获取所有2017赛季NBA常规赛数据 

  • """  

  • datasets = ['']  

  • for item in url_lists:  

  • data1 = getNBASingleData(item)  

  • datasets.extend(data1)  

  • #去掉数据里的空元素  

  • for item in datasets[:]:  

  • if len(item) == 0:  

  • datasets.remove(item)  

  • return datasets  

  • def getNBASingleData(url):  

  • """ 

  • 获取1个页面NBA常规赛数据 

  • """  

  • QueryType=game&order=1&crtcol=date_out&GameType=season&PageNum=3000&Season0=2016&Season1=2017'  

  • # html = requests.get(url).text  

  • html = urllib.urlopen(url).read()  

  • # print html  

  • soup = BeautifulSoup(html)  

  • data = soup.html.body.find('tbody').text  

  • list_data = data.split('\n')  

  • # with open('nba_data.txt','a') as fp:  

  • #     fp.write(data)  

  • # for item in list_data[:]:  

  • #     if len(item) == 0:  

  • #         list_data.remove(item)  

  • return list_data  

  • def saveDataToExcel(datasets,sheetname,filename):  

  • book = Workbook()  

  • sheet = book.add_sheet(sheetname)  

  • sheet.write(0,0,u'序号')  

  • sheet.write(0,1,u'球队')  

  • sheet.write(0,2,u'时间')  

  • sheet.write(0,3,u'结果')  

  • sheet.write(0,4,u'主客')  

  • sheet.write(0,5,u'比赛')  

  • sheet.write(0,6,u'投篮命中率')  

  • sheet.write(0,7,u'命中数')  

  • sheet.write(0,8,u'出手数')  

  • sheet.write(0,9,u'三分命中率')  

  • sheet.write(0,10,u'三分命中数')  

  • sheet.write(0,11,u'三分出手数')  

  • sheet.write(0,12,u'罚球命中率')  

  • sheet.write(0,13,u'罚球命中数')  

  • sheet.write(0,14,u'罚球出手数')  

  • sheet.write(0,15,u'篮板')  

  • sheet.write(0,16,u'前场篮板')  

  • sheet.write(0,17,u'后场篮板')  

  • sheet.write(0,18,u'助攻')  

  • sheet.write(0,19,u'抢断')  

  • sheet.write(0,20,u'盖帽')  

  • sheet.write(0,21,u'失误')  

  • sheet.write(0,22,u'犯规')  

  • sheet.write(0,23,u'得分')  

  • num = 24  

  • row_cnt = 0  

  • data_cnt = 0  

  • data_len = len(datasets)  

  • print 'data_len:',data_len  

  • while(data_cnt< data_len):  

  • row_cnt += 1  

  • print '序号:',row_cnt  

  • for col in range(num):  

  • # print col  

  • sheet.write(row_cnt,col,datasets[data_cnt])  

  • data_cnt += 1  

  • book.save(filename)  

  • def writeDataToTxt(datasets):  

  • fp = open('nba_data.txt','w')  

  • line_cnt = 1  

  • for i in range(len(datasets)-1):  

  • #球队名称对齐的操作:如果球队名字过短或者为76人队是 球队名字后面加两个table 否则加1个table  

  • if line_cnt % 24 == 2 and len(datasets[i]) < 5 or datasets[i] == u'费城76人':  

  • fp.write(datasets[i]+'\t\t')  

  • else:  

  • fp.write(datasets[i]+'\t')  

  • line_cnt += 1  

  • if line_cnt % 24 == 1:  

  • fp.write('\n')  

  • fp.close()  

  • if __name__ == "__main__":  

  • pages = int(1132/150)  

  • url_header = 'hp?page='  

  • url_tail = '&QueryType=game&order=1&crtcol=date_out&GameType=season&PageNum=3000&Season0=2016&Season1=2017#label_show_result'  

  • url_lists = getURLLists(url_header,url_tail,pages)  

  • datasets = getNBAAllData(url_lists)  

  • writeDataToTxt(datasets)  

  • sheetname = 'nba normal data 2016-2017'  

  • str_time = time.strftime('%Y-%m-%d',time.localtime(time.time()))  

  • filename = 'nba_normal_data'+str_time+'.xls'  

  • saveDataToExcel(datasets,sheetname,filename)  



上海华然企业咨询
2024-10-28 广告
在大语言模型的训练中,我们精心挑选了涵盖广泛领域的高质量文本数据。这些数据涵盖了新闻报道、学术论文、文学作品、社交媒体内容等多个维度,确保了模型能够学习到丰富的语言模式和知识结构。通过严格的清洗与去噪处理,我们确保了数据的准确性和多样性,以... 点击进入详情页
本回答由上海华然企业咨询提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式