本帖最后由 trash 于 2022-11-15 10:26 编辑
之前发了用jupyter notebook爬取美女壁纸今天我们来爬取一些数据看看(注意:仅供学习,否则后果自负)
一,网页分析
首先通过观察发现点击不不同分类网址并没有改变所以是用来动态加载技术
所以打开f12里的network
然后通过选择不同年份提交得到不同加载文件发现信息再这里并点开
到此发现了所需要的数据可用python的json解析得到数据代码如下:
[Python] 纯文本查看 复制代码 import requests,json,time,random
import pandas as pd
myheader = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
for season in range(1996,2022):
k=0;all_pages = []
while True:
url=f'https://china.nba.cn/stats2/league/playerstats.json?&pageIndex={k}&season={season}&seasonType=2'
r = requests.get(url,headers=myheader) #请求json
j_data=json.loads(r.text) #解析json
max_index = j_data.get('payload').get('paging').get('totalPages')#提取最大页码
max_index = int(float(max_index)) #转换为整数
players = j_data.get('payload').get('players') #提取列表
df_por=pd.DataFrame([p.get('playerProfile')for p in players]) #球员信息表
df_team = pd.DataFrame([p.get('teamProfile')for p in players])
df_mean = pd.DataFrame([p.get('statAverage')for p in players])
df_statTotal = pd.DataFrame([p.get('statTotal')for p in players])
df_page = pd.concat([df_por,df_team,df_statTotal],axis=1) #横向合并表格
all_pages.append(df_page) #表格存入列表
print(k,end=',')
k+=1
if k > max_index:
break
#time.sleep(random.random()*2)
df = pd.concat(all_pages) #合并赛季表格
df.to_excel(f'{season}.xlsx',index=False)
print(f'-----------{season}------')
代码运行图和结果
|