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

使用BeautifulSoup爬取NBA官网时无法获取指定HTML类内容

解决NBA官网动态内容爬取为空的问题

问题原因

NBA官网的赛程数据是通过JavaScript动态渲染的,requests库只能获取页面的静态HTML源码,此时目标元素还未被渲染出来,所以用BeautifulSoup无法定位到ScheduleDay_sdTop__TqiPn类对应的元素,返回空数组。

解决方案1:用Selenium加载动态页面

Selenium可以模拟浏览器完整加载页面,等待动态内容渲染完成后再提取数据,示例代码如下:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 初始化Chrome浏览器驱动(需提前下载对应版本的chromedriver)
driver = webdriver.Chrome()
driver.get("https://www.nba.com/schedule?cal=all&region=1")

# 等待目标元素加载完成,最多等待10秒
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, "ScheduleDay_sdTop__TqiPn"))
)

# 获取渲染后的完整页面源码
page_source = driver.page_source
soup = BeautifulSoup(page_source, "html.parser")

content = soup.findAll('div', class_='ScheduleDay_sdTop__TqiPn')
for date_item in content:
    print(date_item.get_text(strip=True))

# 关闭浏览器
driver.quit()

解决方案2:直接调用NBA官方API接口

动态网站通常会通过API接口加载数据,你可以通过浏览器开发者工具的「网络」面板,找到返回赛程数据的XHR/Fetch请求,直接请求接口获取结构化数据,这种方式比模拟浏览器更高效。示例代码(接口可能随网站更新变化,需自行抓包验证):

import requests

# 示例赛程数据API接口(需根据实际抓包结果更新)
api_url = "https://data.nba.com/data/10s/v2015/json/mobile_teams/nba/2024/league/00_full_schedule.json"
response = requests.get(api_url)
schedule_data = response.json()

# 提取日期信息
for segment in schedule_data['lscd']:
    print(segment['mscd']['gdtutc'])

注意事项

  • 使用Selenium时,需确保浏览器驱动版本与本地浏览器版本匹配,可配置环境变量或直接指定驱动文件路径。
  • API接口可能随网站迭代变更,需定期通过浏览器抓包确认接口的有效性和参数格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:03:15