You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python webscraping爬取NBA赛事数据返回空字符串如何解决?

Python网页爬取入门指南
  • 先掌握Python基础语法:重点熟悉变量、循环、函数、列表、字典的用法,不需要先学复杂的进阶语法,满足基础调用需求即可
  • 了解网页基础原理:搞懂HTTP请求的基本逻辑、HTML标签结构、CSS选择器、静态页面和动态渲染页面的差异,这部分是后续定位爬取问题的核心基础
  • 按顺序学习常用爬取库:先从静态页面爬取组合requests+BeautifulSoup入门,熟练后再学习动态页面爬取工具selenium、Playwright,有更高性能需求时再接触异步爬取、分布式爬取相关内容
  • 从简单项目逐步练手:初期避开反爬规则严格的大站,先从静态资讯站、公共数据站这类简单目标入手练手,逐步提升项目复杂度。
当前NBA官网爬取返回空的问题解决

问题原因

NBA官网的赛事数据属于动态加载内容,初始HTML页面仅包含页面骨架,你要的赛事数据是页面加载完成后通过JavaScript异步请求渲染生成的。你直接用urllib请求拿到的是还没渲染数据的初始源码,自然找不到对应class的元素,所以返回空列表。

两种解决方案

方案1:抓接口直接拿结构化数据(更推荐)

打开浏览器开发者工具,切换到「网络」面板,刷新页面后筛选「Fetch/XHR」类型的请求,找到返回赛事数据的后端接口,直接请求该接口即可拿到JSON格式的结构化赛事数据,不需要解析HTML,效率更高,数据处理成本更低。

方案2:使用动态渲染工具模拟浏览器加载

如果不想抓接口,可以使用selenium、Playwright这类模拟浏览器的工具,等待页面完全渲染完成后再提取元素,即可正常获取到目标内容。
参考代码如下(selenium版本):
首先安装依赖:
pip install selenium webdriver-manager
代码示例:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import time

# 自动配置浏览器驱动启动Chrome
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.nba.com/games")
# 等待页面渲染完成,可替换为显式等待提升效率
time.sleep(3)
# 获取渲染完成的完整页面源码
soup = BeautifulSoup(driver.page_source, "lxml")
games = soup.find_all("li", class_= "w-full flex flex-col flex-1 md:w-7/12 lg:w-5/12")
print(games)
# 关闭浏览器释放资源
driver.quit()

内容的提问来源于stack exchange,提问作者IceWafflez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:54:05