python爬虫抓包爬取NBA中文网近20年球员数据
#爬取NBA中文网近20年的球员数据 #因为NBA中文网球员数据是通过json异步加载的,所以需要抓包实现 import time import requests import json import csv #获取json文件里面的内容并提取信息 def get_json_content(url): # r_content=requests.get(url).content.decode(utf-8) r_content = requests.get(url).text #将json文件里的内容转化为json格式,结构化方便提取数据 r_json=json.loads(r_content) #球员数据所在赛季 season=r_json.get(payload)[season][statsSeasonYearDisplay] for i in range(0,50): #用一个字典保存球员数据所在的赛季 data = {} data[赛季] =season player=r_json.get(payload)[players][i] data[球员姓名]=player[playerProfile][displayName] data[国家]=player[playerProfile][country] data[球队]=player[teamProfile][displayAbbr] data[身高]=player[playerProfile][height] data[体重]=player[playerProfile][weight] data[位置]=player[playerProfile][position] data[上场时间]=player[statAverage][minsPg] data[场均得分]=player[statAverage][pointsPg] data[篮板]=player[statAverage][rebsPg] data[助攻]=player[statAverage][assistsPg] data[盖帽]=player[statAverage][blocksPg] data[防守] = player[statAverage][defRebsPg] data[效率]=player[statAverage][efficiency] data[命中率]=player[statAverage][fgpct] print(第+str(i+1)+个球员数据信息已经爬取完成) print(data) #引用全局变量文件路径 global path with open(path, a) as f: #得到一个CSV写入对象 writer = csv.writer(f, dialect=my_dialect) #向CSV文件中写入一行数据 writer.writerow((data[赛季],data[球员姓名],data[国家],data[球队],data[身高],data[体重],data[位置],data[上场时间],data[场均得分],data[篮板],data[助攻],data[盖帽],data[防守],data[效率],data[命中率])) if __name__==__main__: #数据保存路径 path=E://NBA_data.csv #自定义一个CSV文件内容分隔形式 class my_dialect(csv.Dialect): lineterminator = delimiter = , quotechar = " quoting = csv.QUOTE_MINIMAL with open(path, w) as f: writer = csv.writer(f, dialect=my_dialect) writer.writerow((赛季,球员姓名, 国家, 球队, 身高, 体重, 位置, 上场时间, 场均得分, 篮板, 助攻, 盖帽, 防守, 效率, 命中率)) # 球员数据的json包链接 url1 = http://china.nba.com/static/data/league/playerstats_All_All_All_0_All_false_ url2 = _4_All_Team_points_All_perGame.json for i in range(1996,2017): if (i!=2004): i=str(i) url=url1+i+url2 get_json_content(url) time.sleep(3)
上一篇:
IDEA上Java项目控制台中文乱码