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

Python+Selenium循环无返回值:网页爬取空DataFrame问题求助

网页爬取空DataFrame问题排查与修复

你遇到的核心问题是无法定位到比赛数据的表格行元素,导致循环无输出、DataFrame为空,主要原因是Selenium版本兼容问题和等待机制不够可靠,以下是具体修复方案:

问题根源

  1. 过时的元素定位API:你使用的find_element_by_xpath、find_elements_by_tag_name是Selenium 3及更早版本的写法,Selenium 4+已弃用这类方法,会导致元素定位失败。
  2. 等待机制不可靠:固定的time.sleep(5)不能保证表格完全加载完成,尤其是网络波动时,可能在元素渲染前就执行了获取操作。

修复后的代码

from selenium import webdriver
from selenium.webdriver.support.ui import Select
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

website = 'https://www.adamchoi.co.uk/teamgoals/detailed'
path = r'C:/Users/Ronald C/Downloads/Data Analyst Portfolio Porjects/Project 5 Web Scrapping/chromedriver.exe'

# 初始化浏览器
driver = webdriver.Chrome(path)
driver.get(website)

# 点击"All matches"按钮(使用新的定位API)
all_matches_button = driver.find_element(By.XPATH, '//label[@analytics-event="All matches"]')
all_matches_button.click()

# 选择国家和赛季
drop_country = Select(driver.find_element(By.ID, 'country'))
drop_country.select_by_visible_text('Spain')

drop_season = Select(driver.find_element(By.ID, 'season'))
drop_season.select_by_visible_text('21/22')

# 显式等待表格加载完成,最多等待10秒
wait = WebDriverWait(driver, 10)
matches = wait.until(EC.presence_of_all_elements_located((By.TAG_NAME, 'tr')))

# 测试打印数据
for match in matches:
    print(match.text)

# 构建DataFrame并导出CSV
match_data = []
for match in matches:
    cols = match.text.split('\n')
    if len(cols) >= 5:  # 确保是有效比赛行
        match_data.append({
            '日期': cols[0],
            '主队': cols[1],
            '比分': cols[2],
            '客队': cols[3],
            '赛事': cols[4]
        })

df = pd.DataFrame(match_data)
df.to_csv('spain_2122_matches.csv', index=False, encoding='utf-8-sig')

driver.quit()

关键修改点

  • 导入By、WebDriverWait和expected_conditions模块,用于新的定位和显式等待。
  • 替换所有find_element_by_*为find_element(By.*, 定位值)的写法。
  • 使用WebDriverWait等待表格行元素出现,替代固定sleep,确保元素加载完成后再获取。
  • 增加数据有效性判断,过滤掉表头或无效行,避免DataFrame出现异常。

内容的提问来源于stack exchange,提问作者Ramón Córdova

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:15:35