全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何使用 Selenium 正确获取篮球参考网站球员名单元素列表

本文详解如何通过 selenium 精准定位并获取动态加载的 html 表格中所有球员行元素,重点解决因页面未就绪或 xpath 不精确导致 `find_elements` 返回空列表的问题。

在使用 Selenium 抓取 Basketball-Reference 等结构化体育数据网站时,一个常见误区是:直接调用 find_elements_by_xpath 而未等待目标内容加载完成,或使用过于宽泛/不稳定的 XPath 表达式(如 //tr/td[@data-stat="player"]),导致匹配失败或返回空列表。

例如,原始代码:

players_list = driver.find_elements_by_xpath('//tr/td[@data-stat="player"]')
print(len(players_list))  # 常常输出 0,即使页面上明显存在该列

问题根源有二:

  1. 时机问题: 是异步渲染或依赖 JS 动态注入的,页面 GET 完成后 DOM 可能尚未就绪;
  2. 定位粒度问题://tr/td[@data-stat="player"] 匹配的是
  3. ;而 find_elements 若返回的是分散的 行为单位抓取,再从中提取所需 和空行) players_rows = driver.find_elements(By.XPATH, "//table[@id='roster']/tbody/tr[.//td[@data-stat='player']]") print(f"成功找到 {len(players_rows)} 名球员") # 示例:提取每位球员姓名(位于 data-stat="player" 的 td 内) for i, row in enumerate(players_rows[:3]): # 打印前3名验证 name_cell = row.find_element(By.XPATH, ".//td[@data-stat='player']") print(f"{i+1}. {name_cell.text.strip()}")

    ⚠️ 注意事项:

    • 避免使用 time.sleep() 替代 WebDriverWait —— 效率低且不可靠;
    • //table[@id='roster']/tbody/tr 默认包含表头行(
    中无 data-stat),因此建议加过滤条件 [.//td[@data-stat='player']] 确保只取有效数据行;
  4. 若需处理分页或懒加载内容,请额外检查是否存在“Show More”按钮并触发点击;
  5. 生产环境建议添加异常处理(如 TimeoutException, NoSuchElementException)提升鲁棒性。
  6. 通过结合精准 XPath + 显式等待 + 语义化元素层级选择,即可稳定获取动态表格中的完整球员列表,彻底规避“长度为 0”的陷阱。

    单元格,而非整行
    ,不仅语义不清,还可能因表格嵌套、隐藏行(如注释、分隔符)干扰匹配结果。

    ✅ 正确做法是:

    • 优先利用唯一 ID 定位父容器(如 //table[@id='roster']);
    或文本,逻辑更健壮;
  7. 强制显式等待(WebDriverWait),确保目标表格已存在于 DOM 中。
  8. 以下是兼容 Selenium 4.17+ 的推荐实现(find_element_by_* 已全面弃用):

    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
    
    driver = webdriver.Firefox()
    driver.get("https://www./link/7f5667890e56de28cb734293df7d2c73")
    
    # 等待 roster 表格整体加载完成(比等待单个 td 更可靠)
    wait = WebDriverWait(driver, 10)
    wait.until(EC.presence_of_element_located((By.ID, "roster")))
    
    # 定位 roster 表格的所有数据行(排除 


# html  # js  # 懒加载  # ai  # webdriver 


相关文章: php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  定制建站是什么?如何实现个性化需求?  Python文件管理规范_工程实践说明【指导】  黑客如何利用漏洞与弱口令入侵网站服务器?  ,想在网上投简历,哪几个网站比较好?  建站之星如何通过成品分离优化网站效率?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  公司网站的制作公司,企业网站制作基本流程有哪些?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  已有域名能否直接搭建网站?  网站制作公司排行榜,四大门户网站排名?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Java解压缩zip - 解压缩多个文件或文件夹实例  内网网站制作软件,内网的网站如何发布到外网?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  如何快速登录WAP自助建站平台?  建站之星上传入口如何快速找到?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  家庭服务器如何搭建个人网站?  如何确保FTP站点访问权限与数据传输安全?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何零成本快速生成个人自助网站?  如何快速搭建虚拟主机网站?新手必看指南  移民网站制作流程,怎么看加拿大移民官网?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  宝塔新建站点为何无法访问?如何排查?  如何选择高效响应式自助建站源码系统?  济南企业网站制作公司,济南社保单位网上缴费步骤?  建站上市公司网站建设方案与SEO优化服务定制指南  网站制作费用多少钱,一个网站的运营,需要哪些费用?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  如何通过WDCP绑定主域名及创建子域名站点?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  如何登录建站主机?访问步骤全解析  制作网站公司那家好,网络公司是做什么的?  如何配置支付宝与微信支付功能?  代刷网站制作软件,别人代刷火车票靠谱吗?  建站主机是否属于云主机类型?  如何在宝塔面板创建新站点?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  建站之星备案流程有哪些注意事项?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  建站之星安装提示数据库无法连接如何解决?  如何在IIS7上新建站点并设置安全权限?  如何选择高效稳定的ISP建站解决方案?  大学网站设计制作软件有哪些,如何将网站制作成自己app? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。