纸上得来终觉浅, 绝知此事要躬行。

#夏天切记贪凉,光膀子对着空调吹,搞了个肩周炎,耽误事

前一篇几篇都是关于数据爬取的文章。有兴趣的可以去看看

男篮世锦赛开始了,看着中国队的苦苦挣扎为了奥运会入场券,哎,没法子呀。好在我有了这篇主题的思路了,谢谢啊,
来到nba中国官网,首先想到直接用get请求主页网址,发现页面都是ajax动态请求的,所以开始抓包吧,


在这个playerlist.json文件中,包含了所有球员的很多信息。包括[‘code’,’‘playerId’, ‘displayName’, ‘country’, ‘draftYear’, ‘experience’, ‘position’, ‘weight’, ‘schoolType’, ‘teamName’, ‘city’],这些是球员的基本信息,这里切记要获取’code‘’字段,后面获取球员关于比赛数据的信息的时候的url拼接需要。


一开始我是把这些数据存放在mysql数据库里,后来又存为了csv文件
下一步开始获取球员的具体的信息,再次抓包,

进入球员具体数据页面,抓包发现数据在stats_steven_adams.json文件中,在查看多个球员详细数据页面发现,请求url,最后都是在https://china.nba.com/static/data/player/stats_拼接了该球员的名字,后头看前面获取到的code字段,就是我们需要拼接的部分,例如,https://china.nba.com/static/data/player/stats_steven_adams.json

###具体的可以看代码

"""
@author: cht
@time: 2019/9/4 19:23
"""# -*- coding: utf-8 -*-import requests
import json
import pymysql
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#解决matplotlib画图中文显示乱码的情况
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']class NBA(object):def __init__(self):self.db = pymysql.connect("localhost", "root", "cht555", "nba", charset="utf8")self.cursor = self.db.cursor()def get_json(self, url):try:res = requests.get(url)if res.status_code == 200:return json.loads(res.text)return Noneexcept Exception as e:print(e)def get_data(self, url):try:req = requests.get(url)if req.status_code == 200 or req.status_code == 304:return json.loads(req.text)return Noneexcept Exception as t:print(t)def parse_jsonData(self, jsonfile):# print(jsonfile)playersinfos = jsonfile['payload']['players']infoList = [['playerId', 'displayName', 'country', 'draftYear', 'experience', 'position', 'weight', 'schoolType','teamName', 'city']]codeList = []#收集code,return出去for i in playersinfos:playinfo = []#收集球员基本信息code = i['playerProfile']['code']print("code:%s" % code)#球员球赛个人数据页面url需要,并没有存放在数据库和csvcodeList.append(code)playerId = i['playerProfile']['playerId']#球员idplayinfo.append(playerId)name = i['playerProfile']['displayName']#球迷名字playinfo.append(name)country = i['playerProfile']['country']#球员国籍playinfo.append(country)draftYear = int(i['playerProfile']['draftYear'])#进入nba的年份playinfo.append(draftYear)experience = int(i['playerProfile']['experience'])#进入nba年限playinfo.append(experience)position = i['playerProfile']['position']#球员擅长的位子playinfo.append(position)weight = float(i['playerProfile']['weight'].split(' ')[0])#体重playinfo.append(weight)schoolType = i['playerProfile']['schoolType']#学历playinfo.append(schoolType)teamName = i['teamProfile']['name']#球队队名playinfo.append(teamName)city = i['teamProfile']['city']#球队所在城市playinfo.append(city)# self.write_mysql(playinfo) #需要保存到数据库,可以调用infoList.append(playinfo)return infoList, codeList  def writr_csv(self, infolist):pp = pd.DataFrame(infolist)pp.to_csv('./player.csv', index=False, encoding="utf-8")def write_mysql(self, playinfo):insert = "insert into players(playerId , name, country, draftYear, experience, position, weight, schoolType, teamName, city)\values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"# execute第二个参数一定为列表,顺序补位(sql命令)self.cursor.execute(insert, playinfo)# 提交到数据库执行self.db.commit()def workrun(self):# 直接把_和开头首字母去掉,就是全部球员基本信息#方法1# -------------------------------------------# num = [chr(i) for i in range(ord("A"), ord("Z") + 1)]# for key in num:#     url = "https://china.nba.com/static/data/league/playerlist_%s.json" % key#     jsonfile = self.get_json(url)#     self.parse_jsonData(jsonfile)#上面这个方式也可以#方法2person_url = "https://china.nba.com/static/data/league/playerlist.json"jsonfile = self.get_json(person_url)codeList = self.parse_jsonData(jsonfile)self.writr_csv(codeList[0])# ----------------------------------------------#获取球员比赛数据p1_cols = []# 存放球员的信息p2_cols = []# 存放球队信息p3_cols = []# 存放球员平均数据p4_cols = []# 存放球员数据t = 0for code in codeList:data_url = "https://china.nba.com/static/data/player/stats_%s.json" % codeprint(data_url)dataresult = self.get_data(data_url)# print(dataresult)t = t + 1try:if t == 1:# 遍历其中一个['playerProfile'],['teamProfile'] 得到各自列名,添加到p1_cols和p2_cols列表中for x in dataresult['payload']['player']['playerProfile']:p1_cols.append(x)for x in dataresult['payload']['player']['teamProfile']:p2_cols.append(x)for x in dataresult['payload']['player']['stats']['currentSeasonTypeStat']['currentSeasonTypePlayerTeamStats'][0]['statAverage']:p3_cols.append(x)for x in dataresult['payload']['player']['stats']['currentSeasonTypeStat']['currentSeasonTypePlayerTeamStats'][0]['statTotal']:p4_cols.append(x)p1 = pd.DataFrame(columns=p1_cols)p2 = pd.DataFrame(columns=p2_cols)p3 = pd.DataFrame(columns=p3_cols)p4 = pd.DataFrame(columns=p4_cols)except Exception as e:print(e)# 初始化一个DataFrame 用来存放数据try:player = pd.DataFrame([dataresult['payload']['player']['playerProfile']])team = pd.DataFrame([dataresult['payload']['player']['teamProfile']])p1 = p1.append(player, ignore_index=True)p2 = p2.append(team, ignore_index=True)data1 = dataresult['payload']['player']['stats']['regularSeasonStat']['playerTeams']for i in data1:if i["season"] == '2018':statAverage = pd.DataFrame([i['statAverage']])statTotal = pd.DataFrame([i['statTotal']])# print(">>>>>>",i['statAverage'])# print(">>>>>>",i['statTotal'])p3 = p3.append(statAverage, ignore_index=True)p4 = p4.append(statTotal, ignore_index=True)breakexcept Exception as e:print(e)continue# 数据合并   两两合并p6 = pd.merge(p1, p2, left_index=True, right_index=True)p7 = pd.merge(p3, p4, left_index=True, right_index=True)p5 = pd.merge(p6, p7, left_index=True, right_index=True)p5.to_csv('./nba_player_2018.csv', index=False, encoding="utf-8")if __name__ == "__main__":nba = NBA()nba.workrun()



发现只有401位球员信息,和全部球员基本信息的524位球员来说差了100多位,这是由于,很多人是长期饮水机守护神,很可能一场球都没有上场,更不要说得分数据了,有了数据要开始数据分析了。请看下一篇

数据分析---2.数据分析----爬取NBA中国官方网站的球员数据,并分析相关推荐

  1. Python零基础之爬取王者荣耀官方网站高清壁纸(普通版)

    Python零基础之爬取王者荣耀官方网站高清壁纸 目标: 分析过程: 1. 确定目标url 2. 解决url解析问题 3. 图片下载解析 4. 多页面的处理 代码示例 需要注意的问题: 目标: 1.下 ...

  2. 数据分析---2.数据分析----分析NBA中国官方网站2017-2018赛季的球员数据

    衣带渐宽终不悔,为伊消得人憔悴 上一篇文章说道了 爬取了NBA中国官方网站2017-2018赛季的球员数据保存了数据库和csv文件,今天要开始处理这些数据了. 先来看看数据内容,如下 "&q ...

  3. python爬虫实操|爬取nba中国官网球员数据

    本次我们将爬取Ajax动态加载数据并进行简单数据分析,其主要方式是找到数据的json包,将其保存到本地目录,进行数据分析 文章目录 一.业务分析 二.步骤 1.找到数据 2.抓取数据 3.分析数据 总 ...

  4. 从入门到入土:基于Python爬取四川大学所有官方网站|狗头保命|

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  5. python 爬取NBA中国官网球员数据

    现在很多网站的数据都是通过Ajax动态加载的,我认为这恰恰降低了我们爬取的难度,因为我们无需考虑如何解析数据,只需要将json文件转换为字典形式,通过字典的键就可以取得我们所需要的数据. 爬取网站:N ...

  6. 钉钉在线求饶?五星分期付款?爬取钉钉App Store真实评价数据并分析

    一.前言 最近钉钉火了,因为疫情影响,钉钉被教育部选为给学生用来在线上网课的平台,本以为自己因为业务过硬得到官方的认可,是2020上天选中的宠鹅,万万没想到到由于小学生不爽被占用寒假时间上课,于是集体 ...

  7. Python爬取中原地产香港26281套在售二手房数据并分析

    背景 香港的贫富差距问题一直十分尖锐,最突出的体现就是收入和楼价的巨大差异.早在60年代末香港房价就经历了暴涨,人们早已对不动产的金融属性了如指掌,全港的投资情绪一直都相当火热.即便香港当前失业率高企 ...

  8. 爬取猫眼电影《一出好戏》数据并分析

    一.获取数据 1. 简介 ​ 本次获取的是猫眼APP的评论数据,如图所示: 通过分析发现猫眼APP的评论数据接口为: http://m.maoyan.com/mmdb/comments/movie/1 ...

  9. 我悄咪咪告诉你:罩杯越小的妹子倾向买越贵的内衣~~Python爬取京东9000条内衣销售数据之数据关联度分析

    将爬取的9000条内衣销售数据整理清洗后,基于Apriori关联算法,针对"罩杯和消费价格倾向这两个元素有无关系"这个问题进行分析 上一篇用数据库清洗数据,点这里 再上一篇爬取数据 ...

最新文章

  1. QT,C++多项式计算器—version3(厌倦CMD黑框框的走起!)
  2. 网工必备的存储知识详解
  3. 模态和非模态代码_我们如何使模态可用和可访问?
  4. Spring Boot微服务,Docker和Kubernetes研讨会–第2部分
  5. concurrenthashmap_ConcurrentHashMap原理浅析
  6. mysql通用mapper_SpringBoot集成tk.mapper通用mapper,针对特殊业务也可写xml文件sql
  7. Uni-G/ The University of Glasgow (Uni-G) ECG Analysis Program
  8. 矩阵范数的等价性(原创)
  9. 中秋海报设计素材|中秋节海报文案
  10. Java三大主流框架
  11. 批量保存网页_一键保存网页图片!macOS自带神器,比《快捷指令》还好用
  12. Android Merged manifest 错误
  13. arcgis 发布服务
  14. curl myip.ipip.net curl ip.cn curl cip.cc
  15. 软件工程师待遇怎么样?软件工程师薪水到底有多高?
  16. @JsonProperty
  17. FIFA Women's World Cup France 2019™ -国际足协继海奶奶女子世足杯曲终人散,USA碰杯
  18. vue文件下载进度条
  19. 【C语言必经之路——第13节】C语言中的数据类型详解
  20. 零知识证明安全实现经验

热门文章

  1. dB 、dBSPL、dBFS、dBTP
  2. SQL语句教程-------SQL语法
  3. Elasticsearch安全又双叒叕出问题? 搜索引擎该怎么选
  4. HDU--2602--Bone Collector 【01背包】
  5. 施炜:华为为什么能成功?
  6. 将excel表格数据转换为xml文本数据
  7. Linux服务器与Windows服务器的区别。
  8. 服务器系统如何还原,服务器怎么还原操作系统
  9. 阿尔法元秒杀阿法狗,人工智能时代开启了吗
  10. 计算机实验室之树莓派