如何获取触发模态窗口的URL,使用BeautifulSoup爬取模态窗口内容
FIBA EuroLeague Women比赛投篮图表模态框内容爬取方案
首先明确:BeautifulSoup只能解析页面初始请求返回的静态HTML内容,你点击点位才弹出的模态框内容,不属于初始静态HTML的直接渲染内容,所以分三种情况处理:
方案一:抓异步接口直接获取全量数据(最高效)
- 打开浏览器开发者工具的「网络」面板,筛选
Fetch/XHR类型的请求 - 点击任意球场点位触发模态框弹出,观察网络面板里新增的请求,一般返回格式为JSON,包含你需要的球员信息、投篮数据、点位坐标等全量内容
- 记录该接口的URL、请求参数、请求头配置,直接用
requests库构造对应请求即可拿到所有数据,无需解析HTML
注意:请求头需要和浏览器请求保持一致,尤其是User-Agent、Referer字段,避免触发反爬规则
方案二:提取静态页隐藏DOM节点
你在元素检查中能直接看到模态框的DOM代码,说明该模态框是提前渲染到静态页面中的,只是默认添加了display: none的隐藏样式,并未触发新请求:
- 用元素检查工具找到模态框对应的DOM节点的class、id等唯一标识
- 直接用BeautifulSoup匹配对应标识即可提取节点内容,无需模拟点击
参考代码:
import requests from bs4 import BeautifulSoup target_url = "https://www.fiba.basketball/euroleaguewomen/21-22/game/1310/MBA-Moscow-ZVVZ-USK-Praha#tab=shot_chart" # 替换为你自己浏览器的User-Agent值 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"} resp = requests.get(target_url, headers=headers) soup = BeautifulSoup(resp.text, "lxml") # 将class值替换为你在元素检查中查到的模态框实际class属性 modal_node = soup.find("div", class_="your-modal-class-name") # 提取模态框内所有文本 print(modal_node.get_text(strip=True))
方案三:模拟浏览器点击触发渲染
如果模态框内容是点击点位后才动态插入DOM的,就需要搭配Selenium、Playwright这类模拟浏览器工具处理:
- 启动模拟浏览器打开目标页面,等待页面完全加载后切换到投篮图表标签
- 定位所有可点击的球场点位元素,循环执行点击操作
- 等待模态框渲染完成后,提取对应内容即可
内容的提问来源于stack exchange,提问作者José Carlos
相关产品推荐
相关产品推荐

