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

使用Selenium与chromedriver爬取时如何提取event__time排除event__stage

实现方法

你当前直接通过event__time类名匹配元素的写法,会把同时携带event__stage类的节点也抓取到——这类节点是赛程阶段分隔标识,不是你需要的比赛时间数据,通过CSS选择器做反向过滤即可解决,同时建议替换Selenium新版本中已经废弃的旧定位API,增加显式等待避免动态加载导致的数据抓取不全问题。

核心修改点

  • 导入Selenium的By类,替换已废弃的find_elements_by_class_name定位方法
  • 使用CSS选择器.event__time:not(.event__stage)做精准匹配,直接过滤掉带event__stage类的无效节点,这个表达式的含义是:选中所有class包含event__time、且class不包含event__stage的元素
  • 增加显式等待逻辑,等页面动态加载完目标元素再执行抓取,比固定时长的time.sleep()效率更高、稳定性更好
  • 合并文本提取和换行替换的逻辑,减少冗余循环

修改后完整代码

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
import pandas as pd

country = 'china'
ligue = 'cba'
year= '2021-2022'
url = f'https://www.flashscore.es/baloncesto/{country}/{ligue}/resultados/'
driver = webdriver.Chrome()
driver.get(url)

# 等待过滤后的比赛时间元素加载完成,最长等待10秒
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.event__time:not(.event__stage)')))

# 直接抓取过滤后的有效节点
time_nodes = driver.find_elements(By.CSS_SELECTOR, '.event__time:not(.event__stage)')
# 提取文本并替换换行符
data_clean = [node.text.replace("\n", ";") for node in time_nodes]

# 导出CSV
df = pd.DataFrame(data_clean)
df.to_csv(f'{country}{ligue}{year}.csv', index=False)

# 抓取完成后关闭浏览器
driver.quit()

如果需要抓取更多历史数据,只需要在定位元素前加页面滚动逻辑,触发页面加载更多已完赛的赛程数据即可。

内容的提问来源于stack exchange,提问作者Enrique Ramirez Moreno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:09:34