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时间戳与时间字符串互相转换实例代码
Nov 28 Python
Python 字典(Dictionary)操作详解
Mar 11 Python
Python编写生成验证码的脚本的教程
May 04 Python
在Python中处理时间之clock()方法的使用
May 22 Python
python抖音表白程序源代码
Apr 07 Python
pygame实现贪吃蛇游戏(上)
Oct 29 Python
Python字符串格式化输出代码实例
Nov 22 Python
Python基于pygame实现单机版五子棋对战
Dec 26 Python
基于SpringBoot构造器注入循环依赖及解决方式
Apr 26 Python
python中Django文件上传方法详解
Aug 05 Python
Python实现给PDF添加水印的方法
Jan 25 Python
Python学习之os包使用教程详解
Mar 21 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
在php中取得image按钮传递的name值
2006/10/09 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
javascript 中的 delete及delete运算符
2015/11/15 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
py2exe 编译ico图标的代码
2013/03/08 Python
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
python实现图片批量压缩程序
2018/07/23 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
2019/08/24 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
python使用多线程+socket实现端口扫描
2020/05/28 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
大学生村官典型材料
2014/01/12 职场文书
平安建设实施方案
2014/03/19 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
机械专业技术员求职信
2014/06/14 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
英语课外活动总结
2014/08/27 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书