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

无法从ESPN网站提取表格并保存CSV:AttributeError问题求助

问题解决与网页抓取最佳实践

错误原因分析

  1. AttributeError 根源:pd.read_html()返回的是DataFrame列表,不是单个DataFrame。你直接把列表赋值给df后调用to_csv(),自然会报错——列表没有这个方法。
  2. 表格提取不完整:你启动了Selenium浏览器,但没利用它获取动态渲染后的页面内容,反而用requests.get()拉取静态HTML。ESPN的这个页面是动态加载的,静态HTML只包含部分数据,所以提取不全。

修正后的代码

下面是修复后的完整代码,利用Selenium获取完整动态页面,再提取表格并保存:

import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

service = Service(r"C:\Users\Sai Ram\Documents\Python\Driver\chromedriver.exe")

def get_driver():
    options = webdriver.ChromeOptions()
    options.add_argument("disable-infobars")
    options.add_argument("start-maximized")
    options.add_argument("disable-dev-shm-usage")
    options.add_argument("no-sandbox")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_argument("disable-blink-features=AutomationControlled")

    driver = webdriver.Chrome(service=service, options=options)
    driver.get("https://stats.espncricinfo.com/ci/engine/records/team/match_results.html?class=3;id=2022;type=year")
    # 显式等待表格加载完成,替代固定sleep更稳定
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.TAG_NAME, "table"))
    )
    return driver

def main():
    driver = get_driver()
    # 获取浏览器渲染后的完整页面HTML
    html = driver.page_source
    # 提取页面中的所有表格
    df_list = pd.read_html(html)
    
    # 查看表格数量,选择目标表格(第一个表格就是比赛结果)
    print(f"共提取到 {len(df_list)} 个表格")
    df = df_list[0]
    
    # 保存到CSV,关闭索引列避免冗余
    df.to_csv(r'C:\Users\Sai Ram\Documents\Power BI\End to End T-20 World Cup DashBoard\CSV Data\scappying.csv', index=False)
    
    # 关闭浏览器释放资源
    driver.quit()

if __name__ == "__main__":
    main()

关键改动说明

  • 用driver.page_source获取动态渲染后的完整HTML,替代requests.get()的静态内容。
  • 从df_list中选取目标DataFrame(这里第一个表格就是需要的比赛结果,可根据实际情况调整索引)。
  • 用WebDriverWait显式等待表格加载,替代固定time.sleep(),提升稳定性和效率。
  • 添加index=False避免写入不必要的索引列,关闭浏览器释放资源。

Python网页抓取最佳方法

1. 优先调用官方API

如果目标网站提供公开API(比如ESPN部分数据有接口),直接调用是最优解:

  • 数据格式规范(JSON/XML),解析成本极低。
  • 规避反爬机制,稳定性远高于页面抓取。
  • 无需处理页面渲染逻辑。

2. 静态内容:Requests + Pandas/BeautifulSoup

如果页面是纯静态(数据直接嵌入HTML,无动态加载):

  • 用requests获取HTML内容。
  • 表格类数据直接用pd.read_html()快速提取;非表格数据用BeautifulSoup解析标签。

3. 动态内容:Selenium/Playwright

如果页面依赖JavaScript动态加载(滚动加载、异步请求):

  • Selenium:支持主流浏览器,文档丰富,适合大多数动态场景。
  • Playwright:新一代自动化工具,API更简洁,支持多浏览器,内置等待机制,比Selenium更省心。

4. 反爬应对要点

  • 配置真实请求头(User-Agent等),模拟浏览器行为。
  • 控制请求频率,避免短时间内大量请求触发IP封禁。
  • 动态页面优先用显式等待,减少不必要的等待时间。

内容的提问来源于stack exchange,提问作者Dinakar V.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:50:50