Python实现爬虫爬取NBA数据功能示例


Posted in Python onMay 28, 2018

本文实例讲述了Python实现爬虫爬取NBA数据功能。分享给大家供大家参考,具体如下:

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

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

源代码如下:

#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常规赛数据
  """
  # url = 'http://stat-nba.com/query_team.php?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 = 'http://stat-nba.com/query_team.php?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)

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python实现将DOC文档转换为PDF的方法
Jul 25 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
Sep 18 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
python粘包问题及socket套接字编程详解
Jun 29 Python
Python求离散序列导数的示例
Jul 10 Python
Python传递参数的多种方式(小结)
Sep 18 Python
使用python无账号无限制获取企查查信息的实例代码
Apr 17 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
用python绘制樱花树
Oct 09 Python
Python存储读取HDF5文件代码解析
Nov 25 Python
Django+Ajax+jQuery实现网页动态更新的实例
May 28 #Python
Python实现合并两个列表的方法分析
May 28 #Python
django js实现部分页面刷新的示例代码
May 28 #Python
Django项目中用JS实现加载子页面并传值的方法
May 28 #Python
Python面向对象类继承和组合实例分析
May 28 #Python
django传值给模板, 再用JS接收并进行操作的实例
May 28 #Python
Django处理文件上传File Uploads的实例
May 28 #Python
You might like
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
PHP关于htmlspecialchars、strip_tags、addslashes的解释
2014/07/04 PHP
php网页病毒清除类
2014/12/08 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
详解PHP版本兼容之openssl调用参数
2018/07/25 PHP
tp5.1 框架路由操作-URL生成实例分析
2020/05/26 PHP
自动最大化窗口的Javascript代码
2013/05/22 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
jquery和ajax的关系详细介绍
2013/11/29 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
jQuery内容筛选选择器实例代码
2017/02/06 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
详解关于React-Router4.0跳转不置顶解决方案
2019/05/10 Javascript
JQuery属性操作与循环用法示例
2019/05/15 jQuery
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
[03:15]2014DOTA2国际邀请赛 专访国士无双信心满满
2014/07/12 DOTA
[01:54]胎教DOTA2 准妈妈玩家现身中国区预选赛
2016/06/26 DOTA
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
Python实现的个人所得税计算器示例
2018/06/01 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
关于Python错误重试方法总结
2021/01/03 Python
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
为什么会有内存对齐
2016/10/10 面试题
小学教师师德感言
2014/02/10 职场文书
八项规定整改方案
2014/02/21 职场文书
党员承诺书内容
2014/03/26 职场文书
电子商务系毕业生自荐信
2014/05/29 职场文书
2014年财务工作总结范文
2014/11/11 职场文书