想法来源:虎扑体育app中有个游戏叫做“每日范特西”,此游戏给于NBA每位球员一个与他能力(数据)相符的身价,玩家的任务是给定金额120,根据每位球员的身价以及位置组建一个自己的阵容(阵容总价不能大于120),之后根据当天每位球员的数据表现,来得出当天的真实评分。每位玩家的任务就是组建一套120以下的阵容,以达到阵容的真实评分最大值。真实评分公式如下:

使用工具:最近接触了python比较多,也算是重拾了1年多前的知识,主要是利用了bs4模版。

实现目标:把NBA每天比赛的球员数据按文件夹放在本地,并计算出他的范特西球员评分。

步骤:

  1. 抓取的NBA数据来源于http://sports.yahoo.com/nba/scoreboard/ 这个网站,网址后面加入日期,就是为当天的比赛场次信息,如(http://sports.yahoo.com/nba/scoreboard/?dateRange=2017-02-27)
  2. 利用requests.get函数得到网址的html代码,再利用bs4对代码进行解析。
    data = requests.get(allurl)bsdata = BeautifulSoup(data.text, 'lxml')`

3.之后在浏览器中对原网址按下F12,得到当天的每场的子网页,如图:
可知整个比赛场次的板块是在class名为’Mb(0px)’的div标签下,之后在此标签下找到所有a标签,因为超链接和文本都存在a标签中。

game_list = bsdata.find('ul', class_='Mb(0px)').find_all('a')

4.得到game_list后,对每个a标签里的内容进行筛选,因为里面的a标签还可能是回放的链接:

    for game in gamelist:tarurl = game['href']   if tarurl.find('/nba') == -1:gamelist.remove(game)

5.筛选之后,得到场次的链接和标题,之后再利用requests和bs4,对每场的链接进行同样的方法,之后再对所要的数据进行分析:

为class名为match-stats的div标签下
6.之后我分析出名字是位于a标签下的文本中(因为球员是可以再点进去一个链接为该球员的详细资料),其他数据是位于td标签下。但是a标签包含的是所有出现的球员名字,td标签是包含了出现了所有数据(包含了球队数据),因此为了完全对应,需要对数据进行处理:

        player_name = bsdata.find('div', class_='match-stats').find_all('a')player_stat = bsdata.find('div', class_='match-stats').find_all('td')stat_list = ['Min','FG','3pt','FT','Off','Def','Reb','Ast','TO','Stl','Blk','PF','+/-','Pts']with open(title+".txt",'w') as nbawrite:count = 0for p in player_name:if(player_stat[count].get_text()==''):#对应的是球队数据,删去count=count+20if(count>=len(player_stat)):#数据已经读完了,但是之后还有球员名字,应该忽略退出breaknbawrite.write('Name: '+ p.get_text()+'\n')nba_list=[]for i in range(0,14):nba_list.append(str(player_stat[count].get_text()))nbawrite.write(stat_list[i]+': '+str(player_stat[count].get_text())+'\n')count=count+1nbawrite.write('评分:')nbawrite.write(str(getfantasy(nba_list)))nbawrite.write('\n\n')

7.得到数据之后就可以加入范特西评分函数,这里就不赘述了。
8.对这些数据建立相对应当天的文件夹,以及对每场再建立一个txt文本。
9.为了可以直接抓到当天的数据,不用手动输入日期,可以利用datetime函数,得到当天时间作为参数传入进去。
效果截图如下:



完整代码如下:

# -*- coding: utf-8 -*-import requests
import datetime
from bs4 import BeautifulSoup
import osdef getDate(date):baseurl = "http://sports.yahoo.com/nba/scoreboard/?dateRange="allurl = baseurl+datetry:data = requests.get(allurl)bsdata = BeautifulSoup(data.text, 'lxml')if os.path.exists(os.path.join("D:\\nba",date)) is not True:os.makedirs(os.path.join("D:\\nba", date))os.chdir(os.path.join("D:\\nba", date))game_list = bsdata.find('ul', class_='Mb(0px)').find_all('a')return game_listexcept:print(u'网络错误')def getfantasy(stat_list):if(stat_list[0]=='-'):return 0else:total = 0.0FG = stat_list[1]number = FG.find('-')FG_succ = FG[:number]total += int(FG_succ)*0.4FG_miss = int(FG[number+1:]) - int(FG_succ)total += FG_miss*(-1)threept = stat_list[2]number = threept.find('-')three_suc = threept[:number]total += int(three_suc)*0.5total += int(stat_list[4])total += int(stat_list[5])*0.7total += int(stat_list[7])*1.5total += int(stat_list[8])*(-1)total += int(stat_list[9])*(2)total += int(stat_list[10])*1.8total += int(stat_list[13])*1return round(total,1)def handle_single(gamelist):for game in gamelist:tarurl = game['href']   if tarurl.find('/nba') == -1:gamelist.remove(game)for game in gamelist:title = game.get_text()baseurl = "http://sports.yahoo.com"atturl = game['href']print(str(atturl))data = requests.get(baseurl+atturl)bsdata = BeautifulSoup(data.text, 'lxml')player_name = bsdata.find('div', class_='match-stats').find_all('a')player_stat = bsdata.find('div', class_='match-stats').find_all('td')stat_list = ['Min','FG','3pt','FT','Off','Def','Reb','Ast','TO','Stl','Blk','PF','+/-','Pts']with open(title+".txt",'w') as nbawrite:count = 0for p in player_name:if(player_stat[count].get_text()==''):#对应的是球队数据,删去count=count+20if(count>=len(player_stat)):#数据已经读完了,但是之后还有球员名字,应该忽略退出breaknbawrite.write('Name: '+ p.get_text()+'\n')nba_list=[]for i in range(0,14):nba_list.append(str(player_stat[count].get_text()))nbawrite.write(stat_list[i]+': '+str(player_stat[count].get_text())+'\n')count=count+1nbawrite.write('评分:')nbawrite.write(str(getfantasy(nba_list)))nbawrite.write('\n\n')print(u'抓取成功')    i = datetime.datetime.now()
today = str(i)[:10]
print(u'今天是%s,将抓取今天的NBA信息'%(today))
game = getDate(today)
handle_single(game)

利用python爬虫技术获取每天每场的每位球员NBA数据以及每日范特西评分相关推荐

  1. Python+爬虫技术获取斗鱼直播图片(整理)

    核心内容: 1.爬虫的基本原理 2.利用Python爬取数据的方法(使用urllib爬取数据) 3.从斗鱼直播平台爬取图片 最近因为工作的原因,要利用爬虫的相关技术,获取html网页相关的数据,特意总 ...

  2. python爬虫怎么赚钱-个人利用Python爬虫技术怎么挣钱-10万被动收入...

    我利用Python爬虫技术年挣10万被动收入的方式,在正式聊Python爬虫技术之前,先来说说挣钱的事,说说作为一个自由职业或兼职者怎么利用爬虫来挣钱. 个人爬虫挣钱方法大致如下 爬虫技术挣钱方法1: ...

  3. python爬虫赚钱的经历-个人利用Python爬虫技术怎么挣钱-10万被动收入

    我利用Python爬虫技术年挣10万被动收入的方式,在正式聊Python爬虫技术之前,先来说说挣钱的事,说说作为一个自由职业或兼职者怎么利用爬虫来挣钱. 个人爬虫挣钱方法大致如下 爬虫技术挣钱方法1: ...

  4. 02-分享:个人利用 Python 爬虫技术怎么挣钱-1万被动收入

    你好,我是悦创. 今天我来分享一篇,猿人学的文章.原文链接:https://www.yuanrenxue.com/crawler/earn-money-python-crawler.html 我利用 ...

  5. python爬虫怎么赚钱-个人利用Python爬虫技术怎么挣钱-10万被动收入

    我利用Python爬虫技术年挣10万被动收入的方式,在正式聊Python爬虫技术之前,先来说说挣钱的事,说说作为一个自由职业或兼职者怎么利用爬虫来挣钱. 个人爬虫挣钱方法大致如下 爬虫技术挣钱方法1: ...

  6. python爬虫能赚钱吗-个人利用Python爬虫技术怎么挣钱-10万被动收入

    个人爬虫挣钱方法大致如下 爬虫技术挣钱方法1:接外包爬虫项目 这是网络爬虫最通常的的挣钱方式,通过外包网站,熟人关系接一个个中小规模的爬虫项目,一般向甲方提供数据抓取,数据结构化,数据清洗等服务. 各 ...

  7. python最适合做什么生意-个人利用Python爬虫技术怎么挣钱-10万被动收入

    个人爬虫挣钱方法大致如下 爬虫技术挣钱方法1:接外包爬虫项目 这是网络爬虫最通常的的挣钱方式,通过外包网站,熟人关系接一个个中小规模的爬虫项目,一般向甲方提供数据抓取,数据结构化,数据清洗等服务. 各 ...

  8. 用python做数据处理怎么挣钱_个人利用python爬虫技术怎么挣钱

    爬虫技术挣钱方法2:整合信息.整合数据做产品 简单说就是抓取分散在各个角落的信息,整合后用网站或微信或APP呈现出来,以通过网盟广告,电商佣金,直接售卖电商产品或知识付费来变现. 别被产品这个词吓到, ...

  9. python爬虫个人如何挣钱-个人利用Python爬虫技术怎么挣钱

    在下写了10年Python,期间写了各种奇葩爬虫,挣各种奇葩的钱,写这篇文章总结下几种爬虫挣钱的方式. 1.最典型的就是找爬虫外包活儿. 这是网络爬虫最通常的的挣钱方式,通过外包网站,熟人关系接一个个 ...

最新文章

  1. android检测蓝牙设备连接不上,Android检查设备连接状态
  2. vue中使用swiper的一些坑
  3. oracle rman 跨版本恢复 11.2.0.3- 11.2.0.4
  4. angular-js资料收集
  5. boost::spirit模块实现错误处理的测试程序
  6. diskgenius 接触“只读“失败_相亲总是失败,这三个步骤你都做了吗?
  7. pytorch模型加载测试_pytorch模型加载方法汇总
  8. C#套接字和windowsAPI套接字
  9. MySQL数据库学习资料(一)
  10. 连接共享打印机出现0x000000bcb问题的解决方法
  11. python画球面_matplotlib中的球面坐标图
  12. Tomcat的作用(自用)
  13. 单片机基础项目(上)
  14. 技术分享 | 如何实现小程序与 App 的跳转
  15. python把二维列表转成一维列表
  16. 初级X编程(非常好的入门学习资料)
  17. js 校验字符串是否为数字和字母组合
  18. JavaScript面向对象实现-坦克大战(附前端全套学习路线)
  19. 拓新药业301089
  20. AXURE实现QQ音乐APP部分原型功能

热门文章

  1. 计算机英语短句,有意义的英文短句
  2. 解除linux中文件被锁状态,linux – 为什么即使文件被锁定,File :: FcntlLock的l_type总是“F_UNLCK”?...
  3. 世界上根本没有黑天鹅
  4. easyUI新增、删除
  5. lms算法的matlab实现,Matlab LMS 算法和 RLS 算法实现
  6. honor 5c recovery nem-tl00h-recovery-twrp3.3.1-0.img
  7. Template-Based Named Entity Recognition Using BART
  8. 深入剖析ISA防火墙策略执行过程
  9. The Earth Rover
  10. 组策略部署Office 2007