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

Web Scraping获取NBA数据遇阻:无法提取目标页面内容求助

解决SPA页面数据爬取不到的问题

问题原因

这个页面是单页应用(SPA),初始HTML仅包含基础框架,你要找的球员名、统计数据都是浏览器执行JavaScript后动态加载渲染出来的。requests.get()只能拿到未渲染的原始HTML,所以BeautifulSoup根本找不到这些动态生成的元素——你可以看print(html_text)的输出,里面肯定没有目标h1标签。

解决方案

方案1:用浏览器自动化工具(Selenium)模拟渲染

模拟真实浏览器加载页面,等JS渲染完成后再提取数据:

  1. 先装依赖:
pip install selenium
  1. 下载对应浏览器的驱动(比如ChromeDriver,要和你浏览器版本匹配),放到系统可执行路径里。
  2. 修改代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup

url = "https://bucketlist.fans/#/player_page/2544/ShotChart?"
driver = webdriver.Chrome()
driver.get(url)

# 等目标元素加载出来,最多等10秒
try:
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "font-mono"))
    )
    # 获取渲染后的完整HTML
    html_text = driver.page_source
    soup = BeautifulSoup(html_text, features="lxml")
    header = soup.find_all("h1", {'class':"font-mono font-bold text-center text-3xl m-2"})
    print(header)
finally:
    driver.quit()

方案2:直接调用后端API(更高效)

单页应用的数据基本都来自后端API,直接抓接口请求比渲染页面快得多:

  1. 打开目标页面按F12,切换到Network标签,刷新页面后筛选XHR/Fetch请求。
  2. 找到返回球员数据的接口(比如类似/api/player/2544/shotchart的请求)。
  3. 直接用requests请求这个接口,拿到JSON格式的数据:
import requests

# 实际接口以你抓包结果为准
api_url = "https://bucketlist.fans/api/player/2544/shotchart"
response = requests.get(api_url, headers={"User-Agent": "Mozilla/5.0"})
data = response.json()
print(data)  # 直接处理JSON数据就行,不用解析HTML

注意事项

  • 频繁请求可能触发反爬,建议加User-Agent请求头,控制请求间隔。
  • API接口可能有参数变化或鉴权要求,以实际抓包结果为准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:25:18