Selenium抓取Betexplorer英超轮次数字无有效输出问题求解
问题修复方案
原有代码错误梳理
- 第一版代码错误点:
- 定位方式混用:
find_elements(By.CLASS_NAME, "th.h-text-left")写法错误,By.CLASS_NAME仅支持传入单个类名,带标签、带点的是CSS选择器语法,应改为By.CSS_SELECTOR - 未提取纯数字,直接获取的轮次文本包含
.Round后缀,不符合入库要求 driver.close没有加括号,未实际执行关闭驱动操作
- 定位方式混用:
- 第二版代码错误点:
- 正则提取数字时使用了未定义的变量
s,应该传入获取到的文本变量PremierLeague_text re.findall返回的是列表,需要提取首个匹配结果转成整数,才能匹配数据库Number_Round的整数类型要求- 同样存在
driver.close未加括号的问题
- 正则提取数字时使用了未定义的变量
可正常运行的修正代码
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import re # 提前初始化driver,示例: # from selenium import webdriver # driver = webdriver.Chrome() wait = WebDriverWait(driver, 20) Values_PremierLeague = [] driver.get("https://www.betexplorer.com/soccer/england/premier-league/fixtures/") # 等待轮次元素加载完成 wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "th.h-text-left"))) # 遍历所有轮次元素 for round_element in driver.find_elements(By.CSS_SELECTOR, "th.h-text-left"): round_text = round_element.text.strip() if 'Round' in round_text: # 提取数字并转为整数 round_num = int(re.search(r'\d+', round_text).group()) # 包装成元组适配executemany要求的格式 Values_PremierLeague.append((round_num,)) print(round_num) driver.close()
入库适配说明
原有SQLite插入代码无需修改,修正后的Values_PremierLeague已经符合executemany要求的元组列表格式,每个元素都是单个整数组成的元组,可直接执行插入操作。
内容的提问来源于stack exchange,提问作者Erling Olsen
相关产品推荐
相关产品推荐

