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

使用Selenium保存多网站数据到CSV时遇NameError(df未定义)

问题解决方法

核心问题

你猜的没错,df仅在try块内部定义,若循环中所有请求都触发NoSuchElementException(没有抓取到任何有效数据),df会从未被初始化,后续调用df.to_csv时就会抛出NameError。另外,每次循环都创建DataFrame属于冗余操作,会降低代码效率。

修正后的代码

import pandas as pd
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By

driver = webdriver.Chrome(executable_path='C:/Users/trive/Downloads/chromedriver_win32/chromedriver.exe')
templist = []

for i in range(len(data)):
    driver.get(data._get_value(i,'URL'))
    
    try:
        title = driver.find_element(By.CLASS_NAME, "amp-wp-title").text  
        content = driver.find_element(By.CLASS_NAME, "amp-wp-article-content").text 
      
        Table_dict = {
            'Title': title,
            'Content': content
        }
      
        templist.append(Table_dict)   

    except NoSuchElementException: 
        continue

# 循环结束后统一创建DataFrame,同时处理空数据场景
df = pd.DataFrame(templist) if templist else pd.DataFrame(columns=['Title', 'Content'])

# 保存CSV,添加index=False避免生成冗余索引列
df.to_csv('S:/DEADPOOL/black coffr assignment/table.csv', index=False)
driver.close() 

关键修改点

  • 将df = pd.DataFrame(templist)移到循环外部,既避免重复创建DataFrame浪费资源,又确保df一定会被定义。
  • 增加空列表判断:如果templist为空(未抓取到任何数据),则创建一个带指定列的空DataFrame,防止保存CSV时出错。
  • 补充必要的模块导入(比如NoSuchElementException和By),避免潜在的未导入错误。

内容的提问来源于stack exchange,提问作者Siddharth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:05:26