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

如何使用Pandas从HTML代码中抓取指定的div标签?

解决NBA赛事页面动态内容抓取问题

问题根源

NBA官网的赛事报道内容是通过JavaScript动态渲染生成的,requests库只能获取页面的初始静态HTML源码,这部分源码里并不包含你要找的id="story"的div标签,所以用BeautifulSoup查找会返回空结果。

解决方案

方法1:用Selenium模拟浏览器加载动态内容

Selenium可以模拟真实浏览器的行为,等待页面完全加载后再获取渲染后的源码,这样就能拿到包含动态内容的HTML。

步骤:

  • 安装Selenium:pip install selenium
  • 下载对应浏览器的驱动(比如ChromeDriver,需和你的Chrome版本匹配),并确保驱动路径配置正确。

示例代码:

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://www.nba.com/game/bkn-vs-phi-0022100993'

# 初始化Chrome浏览器驱动
driver = webdriver.Chrome()
driver.get(url)

# 等待目标元素加载完成,最多等待10秒
try:
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, 'story'))
    )
    # 获取渲染后的页面源码
    page_source = driver.page_source
    soup = BeautifulSoup(page_source, 'html.parser')
    story = soup.find('div', {'id': 'story'})
    print(story.get_text(strip=True))
finally:
    # 关闭浏览器
    driver.quit()

方法2:直接调用NBA的API接口(更高效)

通过浏览器开发者工具的Network面板,能找到NBA官网加载赛事报道的API接口,直接请求API获取JSON格式的数据,比解析HTML更稳定高效。

示例代码:

import requests

# 赛事ID为URL中的0022100993,拼接API地址
api_url = 'https://data.nba.com/data/v2015/json/mobile_teams/nba/2021/scores/gamedetail/0022100993_gamedetail.json'

response = requests.get(api_url)
data = response.json()

# 从JSON中提取赛事报道内容(具体字段需根据API返回结构调整)
story_content = data['g']['gd']['pl']
print(story_content)

注意事项

  • 使用Selenium时,浏览器驱动版本要和浏览器版本匹配,避免兼容性问题。
  • 调用API时,可适当添加浏览器请求头,避免被网站拦截。
  • 批量抓取时控制请求频率,避免触发反爬机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:05:12