使用find_elements_by_xpath获取常规赛场次时长度异常求助
问题原因分析
1. 全局XPath返回过多结果的原因
使用//tbody/tr[@id and @data-row]时,会匹配页面中所有表格的符合条件的行,而非仅目标常规赛比赛日志表格(pgl_basic)。Basketball Reference页面里除了常规赛日志,还包含季前赛、全明星赛等其他模块的表格行,这些行的DOM结构同样满足@id和@data-row的筛选条件,最终导致统计结果远超常规赛实际场次。
2. 精确XPath返回0结果的原因
主要是以下两种情况导致:
- 页面未完全加载:Selenium执行元素查找时,目标表格的DOM还未通过JavaScript渲染完毕。该网站的表格数据是动态加载的,若未等待页面渲染完成就执行查找,会无法定位到元素。
- 表格数据被隐藏在HTML注释中:这类体育数据网站常将原始表格内容放在HTML注释(
<!-- ... -->)内,再通过前端JS解析为可视的DOM结构。直接用XPath查找时,Selenium无法识别注释内的元素,自然返回空结果。
解决建议
- 针对结果过多问题:始终限定目标表格ID,确保仅查找
table[@id="pgl_basic"]下的行。 - 针对找不到元素问题:
- 显式等待表格加载完成,使用
WebDriverWait等待目标元素出现:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC total_games = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.XPATH, '//table[@id="pgl_basic"]/tbody/tr[@id and @data-row]')) ) - 若等待后仍无结果,可尝试解析页面中的HTML注释提取数据(优先推荐等待JS渲染的方式)。
- 显式等待表格加载完成,使用
内容的提问来源于stack exchange,提问作者maxpower8888
相关产品推荐
相关产品推荐

