0

0

Python爬取NBA选秀体测数据:高效获取动态加载内容的教程

聖光之護

聖光之護

发布时间:2025-11-01 10:32:39

|

930人浏览过

|

来源于php中文网

原创

Python爬取NBA选秀体测数据:高效获取动态加载内容的教程

本教程将指导您如何使用python高效爬取nba官方网站上动态加载的选秀体测数据。针对传统网页抓取工具难以处理javascript动态渲染内容的问题,我们将演示如何通过分析网络请求,直接调用其背后的api接口,并利用`requests`库和`pandas`库解析json响应,最终将数据结构化为易于分析的dataframe,从而绕过复杂的页面渲染过程,实现精确且高效的数据获取。

在现代网页开发中,许多网站为了提升用户体验,会采用JavaScript动态加载数据。这意味着,当您使用像BeautifulSoup这样的库直接解析初始HTML时,那些由JavaScript后续加载的表格或内容可能并不会出现在原始的HTML源代码中。例如,NBA官方网站上的选秀体测数据页面,其表格内容就是通过异步请求(AJAX)从后端API获取并动态渲染到页面上的。对于这类场景,直接抓取数据源的API接口是最高效且稳定的方法。

识别动态数据源

当传统方法(如requests结合BeautifulSoup查找<table>标签)无法获取到目标数据时,通常意味着数据是通过API接口动态加载的。识别这些API接口的关键在于使用浏览器的开发者工具:

  1. 打开目标网页: 访问您想要抓取数据的页面,例如NBA选秀体测数据页面。
  2. 打开开发者工具: 在浏览器中按F12(或右键点击页面选择“检查”)。
  3. 切换到“网络”(Network)选项卡: 此选项卡会显示页面加载过程中所有的网络请求。
  4. 过滤XHR/Fetch请求: 通常,动态加载的数据请求会显示为XHR(XMLHttpRequest)或Fetch类型。
  5. 刷新页面或观察交互: 刷新页面,或者进行一些交互(如切换赛季年份),观察新的请求。找到与数据加载相关的请求,通常其响应类型为JSON。

通过分析NBA选秀体测数据页面,我们可以发现数据并非直接嵌入在HTML中,而是通过一个特定的API端点获取:https://stats.nba.com/stats/draftcombineplayeranthro。

构建API请求

一旦识别出API端点,下一步就是使用Python的requests库来模拟浏览器行为,向该API发送请求。这通常涉及设置请求参数(params)和请求头(headers)。

立即学习Python免费学习笔记(深入)”;

1. API端点和参数

API端点是数据请求的目标URL。对于NBA选秀体测数据,它是: https://stats.nba.com/stats/draftcombineplayeranthro

该API接受以下关键参数来过滤数据:

  • LeagueID: 联盟ID,例如"00"代表NBA。
  • SeasonYear: 赛季年份,例如"2022-23"。

我们将这些参数组织成一个字典:

飞书多维表格
飞书多维表格

表格形态的AI工作流搭建工具,支持批量化的AI创作与分析任务,接入DeepSeek R1满血版

下载
payload = {
    "LeagueID": "00",
    "SeasonYear": "2022-23"
}

2. 设置请求头

为了让API服务器认为我们的请求是来自一个合法的浏览器,而不是一个爬虫,我们需要设置一些HTTP请求头。其中最重要的是Referer和User-Agent:

  • Referer: 指示请求是从哪个页面发出的,通常是原始网页的URL。
  • User-Agent: 标识客户端的类型和版本,模拟一个真实的浏览器。
headers = {
    "Referer": "https://www.nba.com/", # 模拟请求来源
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" # 模拟浏览器用户代理
}

注意: User-Agent字符串可以从您自己浏览器的开发者工具中获取,以确保其最新和有效。

发送请求与处理JSON响应

使用requests.get()方法发送GET请求,并将params和headers传递进去。API通常会返回JSON格式的数据,我们可以使用.json()方法将其解析为Python字典。

import requests
import pandas as pd

url = "https://stats.nba.com/stats/draftcombineplayeranthro"

payload = {
    "LeagueID": "00",
    "SeasonYear": "2022-23"
}

headers = {
    "Referer": "https://www.nba.com/",
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
}

# 发送GET请求
response = requests.get(url, params=payload, headers=headers)
response.raise_for_status() # 检查请求是否成功(状态码200)

# 解析JSON响应
data = response.json()

# 提取数据和列名
# NBA API的JSON结构通常包含一个'resultSets'列表,其中每个元素代表一个数据集
# 'rowSet'包含实际的数据行,'headers'包含列名
df = pd.DataFrame(data["resultSets"][0]["rowSet"],
                  columns=data["resultSets"][0]["headers"])

print(df.head())

上述代码将返回一个包含NBA选秀体测数据的pandas.DataFrame,其输出示例如下:

   TEMP_PLAYER_ID  PLAYER_ID FIRST_NAME  ... BODY_FAT_PCT HAND_LENGTH HAND_WIDTH
0         1630534    1630534      Ochai  ...         5.40        8.75       9.50
1         1631116    1631116    Patrick  ...         8.90        8.75       9.50
2         1631094    1631094      Paolo  ...          NaN         NaN        NaN
3         1631109    1631109       Mark  ...         5.40        9.00       9.75
4         1630592    1630592      Jalen  ...          NaN         NaN        NaN

[5 rows x 18 columns]

注意事项

  1. API调用频率: 大多数API都有调用频率限制(Rate Limit)。频繁或过快的请求可能会导致IP被暂时或永久封禁。请合理设置请求间隔,或遵循API文档中规定的限制。
  2. 错误处理: 在实际应用中,建议添加try-except块来处理可能出现的网络错误(如连接超时)、HTTP错误状态码(如403 Forbidden, 404 Not Found)或JSON解析失败等情况,增强代码的健壮性。
  3. API结构变化: API的JSON响应结构可能会随时间变化。如果您的代码突然无法正常工作,请检查API响应的最新结构。
  4. 合法性与道德: 在抓取任何网站数据时,请务必遵守该网站的使用条款和robots.txt文件。虽然直接调用API通常比解析HTML更稳定,但仍需确保您的行为符合法律法规和道德规范。
  5. 参数化赛季年份: 代码中的SeasonYear参数可以灵活修改,以获取不同赛季的数据,甚至可以编写循环来批量获取。

总结

通过本教程,我们学习了如何通过识别和直接调用API接口来高效地抓取动态加载的网页数据。这种方法绕过了复杂的JavaScript渲染过程,提供了更稳定、更快速的数据获取途径。掌握这种技术对于处理现代网站的动态内容至关重要,并能帮助您更有效地进行数据分析和应用开发。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

547

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

335

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

166

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

170

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

124

2023.11.15

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

258

2024.09.24

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.6万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号