全网整合营销服务商

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

免费咨询热线: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 


相关文章: 高性能网站服务器配置指南:安全稳定与高效建站核心方案  香港服务器租用费用高吗?如何避免常见误区?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  建站之星2.7模板:企业网站建设与h5定制设计专题  中山网站推广排名,中山信息港登录入口?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何在IIS7中新建站点?详细步骤解析  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  建站之星伪静态规则如何设置?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  建站10G流量真的够用吗?如何应对访问高峰?  如何使用Golang table-driven基准测试_多组数据测量函数效率  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  怀化网站制作公司,怀化新生儿上户网上办理流程?  如何选择香港主机高效搭建外贸独立站?  微信小程序 input输入框控件详解及实例(多种示例)  黑客如何通过漏洞一步步攻陷网站服务器?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  文字头像制作网站推荐软件,醒图能自动配文字吗?  如何选择高性价比服务器搭建个人网站?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  如何高效利用200m空间完成建站?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  个人网站制作流程图片大全,个人网站如何注销?  建站之星图片链接生成指南:自助建站与智能设计教程  b2c电商网站制作流程,b2c水平综合的电商平台?  制作表格网站有哪些,线上表格怎么弄?  如何在自有机房高效搭建专业网站?  建站之星导航如何优化提升用户体验?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  微课制作网站有哪些,微课网怎么进?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何通过WDCP绑定主域名及创建子域名站点?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  高端建站如何打造兼具美学与转化的品牌官网?  再谈Python中的字符串与字符编码(推荐)  成都网站制作报价公司,成都工业用气开户费用?  黑客入侵网站服务器的常见手法有哪些?  Python文件管理规范_工程实践说明【指导】  如何快速使用云服务器搭建个人网站?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何通过FTP空间快速搭建安全高效网站?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  制作网站的模板软件,网站怎么建设?  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  如何通过多用户协作模板快速搭建高效企业网站? 

您的项目需求

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